Browse Source

Merge pull request #285 from rubensr/jpeg-decode-grayscale

Adding simple decode for jpeg grayscale colorspaces. Also added test …

Former-commit-id: 8839e807b7c2cee4f39f90d3b9fb878565911265
Former-commit-id: 4313e5740e1b8cbab05f60ed6304dbf52cb0220f
Former-commit-id: deaad8291ad910753431b14115567fdc55203aed
pull/17/head
James Jackson-South 10 years ago
parent
commit
213795b4a9
  1. 42
      src/ImageProcessor/Formats/Jpg/JpegDecoder.cs
  2. 1
      tests/ImageProcessor.Tests/Processors/ProcessorTestBase.cs
  3. 1
      tests/ImageProcessor.Tests/TestImages/Formats/Jpg/Floorplan.jpeg.REMOVED.git-id

42
src/ImageProcessor/Formats/Jpg/JpegDecoder.cs

@ -102,15 +102,34 @@ namespace ImageProcessor.Formats
float[] pixels = new float[pixelWidth * pixelHeight * 4];
if (!(jpg.Colorspace == Colorspace.RGB && jpg.BitsPerComponent == 8))
if (jpg.Colorspace == Colorspace.RGB && jpg.BitsPerComponent == 8)
{
throw new NotSupportedException("JpegDecoder only support RGB color space.");
}
Parallel.For(
0,
pixelHeight,
y =>
{
SampleRow row = jpg.GetRow(y);
for (int x = 0; x < pixelWidth; x++)
{
Sample sample = row.GetAt(x);
Parallel.For(
0,
pixelHeight,
y =>
int offset = ((y * pixelWidth) + x) * 4;
pixels[offset + 0] = sample[0] / 255f;
pixels[offset + 1] = sample[1] / 255f;
pixels[offset + 2] = sample[2] / 255f;
pixels[offset + 3] = 1;
}
});
}
else if (jpg.Colorspace == Colorspace.Grayscale && jpg.BitsPerComponent == 8)
{
Parallel.For(
0,
pixelHeight,
y =>
{
SampleRow row = jpg.GetRow(y);
@ -121,11 +140,16 @@ namespace ImageProcessor.Formats
int offset = ((y * pixelWidth) + x) * 4;
pixels[offset + 0] = sample[0] / 255f;
pixels[offset + 1] = sample[1] / 255f;
pixels[offset + 2] = sample[2] / 255f;
pixels[offset + 1] = sample[0] / 255f;
pixels[offset + 2] = sample[0] / 255f;
pixels[offset + 3] = 1;
}
});
}
else
{
throw new NotSupportedException("JpegDecoder only supports RGB and Grayscale color spaces.");
}
image.SetPixels(pixelWidth, pixelHeight, pixels);
}

1
tests/ImageProcessor.Tests/Processors/ProcessorTestBase.cs

@ -19,6 +19,7 @@ namespace ImageProcessor.Tests
/// </summary>
public static readonly List<string> Files = new List<string>
{
"TestImages/Formats/Jpg/Floorplan.jpeg",
"TestImages/Formats/Jpg/Calliphora.jpg",
//"TestImages/Formats/Jpg/gamma_dalai_lama_gray.jpg", //Perf: Enable for local testing only
"TestImages/Formats/Bmp/Car.bmp",

1
tests/ImageProcessor.Tests/TestImages/Formats/Jpg/Floorplan.jpeg.REMOVED.git-id

@ -0,0 +1 @@
5a1eaf806b7f3793d3db41c85bac6366584bce83
Loading…
Cancel
Save