Packages
image
0.64.0
0.72.0
0.71.0
0.70.0
0.69.0
0.68.0
0.67.0
0.67.0-dev
retired
0.66.0
0.65.0
0.64.0
0.63.0
0.62.1
0.62.0
0.61.1
0.61.0
0.60.0
0.59.3
0.59.2
0.59.1
0.59.0
0.58.0
0.57.0
0.56.1
0.56.0
0.55.2
0.55.1
retired
0.55.0
0.54.4
0.54.3
0.54.2
0.54.1
0.54.0
0.53.0
0.52.3
0.52.2
0.52.1
0.52.0
retired
0.51.0
0.50.0
0.49.0
0.48.1
0.48.0
0.47.0
0.46.0
0.45.0
0.44.0
0.43.2
0.43.1
0.43.0
0.42.0
0.41.0
0.40.0
0.39.3
0.39.2
0.39.1
0.39.0
0.38.4
0.38.3
0.38.2
0.38.1
0.38.0
0.37.0
0.36.2
0.36.1
0.36.0
0.35.0
0.34.0
0.33.0
0.32.0
0.31.1
0.31.0
0.30.0
0.29.0
0.28.2
0.28.1
0.28.0
0.27.0
0.26.0
0.25.1
0.25.0
0.24.1
0.24.0
0.23.2
0.23.1
0.23.0
0.22.1
0.22.0
0.21.0
0.20.0
retired
0.19.0
0.18.1
0.18.0
0.17.0
0.16.0
0.15.0
0.14.4
0.14.2
0.14.1
0.14.0
retired
0.13.1
0.13.0
0.12.0
0.11.0
0.10.0
0.10.0-rc.0
retired
0.9.0
retired
0.8.0
0.7.0
0.6.0
0.5.0
0.4.0
0.3.0
0.2.0
0.1.0
An approachable image processing library primarily based upon Vix and libvips that is NIF-based, fast, multi-threaded, pipelined and has a low memory footprint.
Current section
Files
Jump to
Current section
Files
lib/image/pixels.ex
defmodule Image.Pixels do
@moduledoc false
def pixels_from_binary(_binary, _type, bands) when bands not in 1..4 do
{:error,
%Image.Error{
message: "Only images with 1..4 bands are supported. Found #{inspect(bands)}",
reason: "Only images with 1..4 bands are supported. Found #{inspect(bands)}"
}}
end
def pixels_from_binary(binary, {:u, 8}, bands) do
case bands do
1 ->
for <<red::native-unsigned-8 <- binary>>,
do: [red]
2 ->
for <<red::native-unsigned-8, green::native-unsigned-8 <- binary>>,
do: [red, green]
3 ->
for <<red::native-unsigned-8, green::native-unsigned-8, blue::native-unsigned-8 <- binary>>,
do: [red, green, blue]
4 ->
for <<red::native-unsigned-8, green::native-unsigned-8, blue::native-unsigned-8,
alpha::native-unsigned-8 <- binary>>,
do: [red, green, blue, alpha]
end
|> wrap(:ok)
end
def pixels_from_binary(binary, {:u, 16}, bands) do
case bands do
1 ->
for <<red::native-unsigned-16 <- binary>>,
do: [red]
2 ->
for <<red::native-unsigned-16, green::native-unsigned-16 <- binary>>,
do: [red, green]
3 ->
for <<red::native-unsigned-16, green::native-unsigned-16,
blue::native-unsigned-16 <- binary>>,
do: [red, green, blue]
4 ->
for <<red::native-unsigned-16, green::native-unsigned-16, blue::native-unsigned-16,
alpha::native-unsigned-16 <- binary>>,
do: [red, green, blue, alpha]
end
|> wrap(:ok)
end
def pixels_from_binary(binary, {:u, 32}, bands) do
case bands do
1 ->
for <<red::native-unsigned-32 <- binary>>,
do: [red]
2 ->
for <<red::native-unsigned-32, green::native-unsigned-32 <- binary>>,
do: [red, green]
3 ->
for <<red::native-unsigned-32, green::native-unsigned-32,
blue::native-unsigned-32 <- binary>>,
do: [red, green, blue]
4 ->
for <<red::native-unsigned-32, green::native-unsigned-32, blue::native-unsigned-32,
alpha::native-unsigned-32 <- binary>>,
do: [red, green, blue, alpha]
end
|> wrap(:ok)
end
def pixels_from_binary(binary, {:u, 64}, bands) do
case bands do
1 ->
for <<red::native-unsigned-64 <- binary>>,
do: [red]
2 ->
for <<red::native-unsigned-64, green::native-unsigned-64 <- binary>>,
do: [red, green]
3 ->
for <<red::native-unsigned-64, green::native-unsigned-64,
blue::native-unsigned-64 <- binary>>,
do: [red, green, blue]
4 ->
for <<red::native-unsigned-64, green::native-unsigned-64, blue::native-unsigned-64,
alpha::native-unsigned-64 <- binary>>,
do: [red, green, blue, alpha]
end
|> wrap(:ok)
end
def pixels_from_binary(binary, {:s, 8}, bands) do
case bands do
1 ->
for <<red::native-signed-8 <- binary>>,
do: [red]
2 ->
for <<red::native-signed-8, green::native-signed-8 <- binary>>,
do: [red, green]
3 ->
for <<red::native-signed-8, green::native-signed-8, blue::native-signed-8 <- binary>>,
do: [red, green, blue]
4 ->
for <<red::native-signed-8, green::native-signed-8, blue::native-signed-8,
alpha::native-signed-8 <- binary>>,
do: [red, green, blue, alpha]
end
|> wrap(:ok)
end
def pixels_from_binary(binary, {:s, 16}, bands) do
case bands do
1 ->
for <<red::native-signed-16 <- binary>>,
do: [red]
2 ->
for <<red::native-signed-16, green::native-signed-16 <- binary>>,
do: [red, green]
3 ->
for <<red::native-signed-16, green::native-signed-16, blue::native-signed-16 <- binary>>,
do: [red, green, blue]
4 ->
for <<red::native-signed-16, green::native-signed-16, blue::native-signed-16,
alpha::native-signed-16 <- binary>>,
do: [red, green, blue, alpha]
end
|> wrap(:ok)
end
def pixels_from_binary(binary, {:s, 32}, bands) do
case bands do
1 ->
for <<red::native-signed-32 <- binary>>,
do: [red]
2 ->
for <<red::native-signed-32, green::native-signed-32 <- binary>>,
do: [red, green]
3 ->
for <<red::native-signed-32, green::native-signed-32, blue::native-signed-32 <- binary>>,
do: [red, green, blue]
4 ->
for <<red::native-signed-32, green::native-signed-32, blue::native-signed-32,
alpha::native-signed-32 <- binary>>,
do: [red, green, blue, alpha]
end
|> wrap(:ok)
end
def pixels_from_binary(binary, {:s, 64}, bands) do
case bands do
1 ->
for <<red::native-signed-64 <- binary>>,
do: [red]
2 ->
for <<red::native-signed-64, green::native-signed-64 <- binary>>,
do: [red, green]
3 ->
for <<red::native-signed-64, green::native-signed-64, blue::native-signed-64 <- binary>>,
do: [red, green, blue]
4 ->
for <<red::native-signed-64, green::native-signed-64, blue::native-signed-64,
alpha::native-signed-64 <- binary>>,
do: [red, green, blue, alpha]
end
|> wrap(:ok)
end
def pixels_from_binary(binary, {:f, 32}, bands) do
case bands do
1 ->
for <<red::native-float-32 <- binary>>,
do: [red]
2 ->
for <<red::native-float-32, green::native-float-32 <- binary>>,
do: [red, green]
3 ->
for <<red::native-float-32, green::native-float-32, blue::native-float-32 <- binary>>,
do: [red, green, blue]
4 ->
for <<red::native-float-32, green::native-float-32, blue::native-float-32,
alpha::native-float-32 <- binary>>,
do: [red, green, blue, alpha]
end
|> wrap(:ok)
end
def pixels_from_binary(binary, {:f, 64}, bands) do
case bands do
1 ->
for <<red::native-float-64 <- binary>>,
do: [red]
2 ->
for <<red::native-float-64, green::native-float-64 <- binary>>,
do: [red, green]
3 ->
for <<red::native-float-64, green::native-float-64, blue::native-float-64 <- binary>>,
do: [red, green, blue]
4 ->
for <<red::native-float-64, green::native-float-64, blue::native-float-64,
alpha::native-float-64 <- binary>>,
do: [red, green, blue, alpha]
end
|> wrap(:ok)
end
def pixels_from_binary(_binary, type, _bands) do
{:error,
%Image.Error{
message: "Unsupported image type for pixels_from_binary/3. Found #{inspect(type)}",
reason: "Unsupported image type for pixels_from_binary/3. Found #{inspect(type)}"
}}
end
defp wrap(item, atom) do
{atom, item}
end
end