Browse Source

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

Former-commit-id: 6ef0bffcb0a08b3876373392f3d67572273cea1b
Former-commit-id: db74e4cf38bbb992fc3b88de30f6b7e79cf9ac19
Former-commit-id: c51e5e8718dd52306a6656c4f9d85be76e9ecdb8
af/merge-core
Rubens Fernandes 10 years ago
parent
commit
35be517c4c
  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