Skip to content

Commit b842c07

Browse files
committed
Fix issue with white is zero with 24 and 32 bit
1 parent b29581e commit b842c07

File tree

9 files changed

+14
-12
lines changed

9 files changed

+14
-12
lines changed

src/ImageSharp/Formats/Tiff/PhotometricInterpretation/WhiteIsZero24TiffColor{TPixel}.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ public override void Decode(ReadOnlySpan<byte> data, Buffer2D<TPixel> pixels, in
3131
color.FromVector4(TiffUtils.Vector4Default);
3232
byte[] buffer = new byte[4];
3333
int bufferStartIdx = this.isBigEndian ? 1 : 0;
34+
const uint maxValue = 0xFFFFFF;
3435

3536
Span<byte> bufferSpan = buffer.AsSpan(bufferStartIdx);
3637
int offset = 0;
@@ -42,7 +43,7 @@ public override void Decode(ReadOnlySpan<byte> data, Buffer2D<TPixel> pixels, in
4243
for (int x = 0; x < pixelRow.Length; x++)
4344
{
4445
data.Slice(offset, 3).CopyTo(bufferSpan);
45-
ulong intensity = TiffUtils.ConvertToUIntBigEndian(buffer);
46+
ulong intensity = maxValue - TiffUtils.ConvertToUIntBigEndian(buffer);
4647
offset += 3;
4748

4849
pixelRow[x] = TiffUtils.ColorScaleTo24Bit(intensity, color);
@@ -53,7 +54,7 @@ public override void Decode(ReadOnlySpan<byte> data, Buffer2D<TPixel> pixels, in
5354
for (int x = 0; x < pixelRow.Length; x++)
5455
{
5556
data.Slice(offset, 3).CopyTo(bufferSpan);
56-
ulong intensity = TiffUtils.ConvertToUIntLittleEndian(buffer);
57+
ulong intensity = maxValue - TiffUtils.ConvertToUIntLittleEndian(buffer);
5758
offset += 3;
5859

5960
pixelRow[x] = TiffUtils.ColorScaleTo24Bit(intensity, color);

src/ImageSharp/Formats/Tiff/PhotometricInterpretation/WhiteIsZero32TiffColor{TPixel}.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ public override void Decode(ReadOnlySpan<byte> data, Buffer2D<TPixel> pixels, in
2929
// we define our own defaults as a workaround. See: https://github.com/dotnet/runtime/issues/55623
3030
var color = default(TPixel);
3131
color.FromVector4(TiffUtils.Vector4Default);
32+
const uint maxValue = 0xFFFFFFFF;
3233

3334
int offset = 0;
3435
for (int y = top; y < top + height; y++)
@@ -38,7 +39,7 @@ public override void Decode(ReadOnlySpan<byte> data, Buffer2D<TPixel> pixels, in
3839
{
3940
for (int x = 0; x < pixelRow.Length; x++)
4041
{
41-
ulong intensity = TiffUtils.ConvertToUIntBigEndian(data.Slice(offset, 4));
42+
ulong intensity = maxValue - TiffUtils.ConvertToUIntBigEndian(data.Slice(offset, 4));
4243
offset += 4;
4344

4445
pixelRow[x] = TiffUtils.ColorScaleTo32Bit(intensity, color);
@@ -48,7 +49,7 @@ public override void Decode(ReadOnlySpan<byte> data, Buffer2D<TPixel> pixels, in
4849
{
4950
for (int x = 0; x < pixelRow.Length; x++)
5051
{
51-
ulong intensity = TiffUtils.ConvertToUIntLittleEndian(data.Slice(offset, 4));
52+
ulong intensity = maxValue - TiffUtils.ConvertToUIntLittleEndian(data.Slice(offset, 4));
5253
offset += 4;
5354

5455
pixelRow[x] = TiffUtils.ColorScaleTo32Bit(intensity, color);

tests/ImageSharp.Tests/TestImages.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -600,16 +600,16 @@ public static class Tiff
600600
public const string Flower16BitGray = "Tiff/flower-minisblack-16.tiff";
601601
public const string Flower16BitGrayLittleEndian = "Tiff/flower-minisblack-16_lsb.tiff";
602602
public const string Flower16BitGrayMinIsWhiteLittleEndian = "Tiff/flower-miniswhite-16_lsb.tiff";
603-
public const string Flower16BitGrayMinIsWhiteBigEndian = "Tiff/flower-miniswhite-16.tiff";
604-
public const string Flower24BitGray = "Tiff/flower-minisblack-24.tiff";
603+
public const string Flower16BitGrayMinIsWhiteBigEndian = "Tiff/flower-miniswhite-16_msb.tiff";
604+
public const string Flower24BitGray = "Tiff/flower-minisblack-24_msb.tiff";
605605
public const string Flower24BitGrayLittleEndian = "Tiff/flower-minisblack-24_lsb.tiff";
606-
public const string Flower32BitGray = "Tiff/flower-minisblack-32.tiff";
606+
public const string Flower32BitGray = "Tiff/flower-minisblack-32_msb.tiff";
607607
public const string Flower32BitGrayLittleEndian = "Tiff/flower-minisblack-32_lsb.tiff";
608608
public const string Flower32BitFloatGray = "Tiff/flower-minisblack-float32_msb.tiff";
609609
public const string Flower32BitFloatGrayLittleEndian = "Tiff/flower-minisblack-float32_lsb.tiff";
610610
public const string Flower32BitFloatGrayMinIsWhite = "Tiff/flower-miniswhite-float32_msb.tiff";
611611
public const string Flower32BitFloatGrayMinIsWhiteLittleEndian = "Tiff/flower-miniswhite-float32_lsb.tiff";
612-
public const string Flower32BitGrayMinIsWhite = "Tiff/flower-miniswhite-32.tiff";
612+
public const string Flower32BitGrayMinIsWhite = "Tiff/flower-miniswhite-32_msb.tiff";
613613
public const string Flower32BitGrayMinIsWhiteLittleEndian = "Tiff/flower-miniswhite-32_lsb.tiff";
614614

615615
public const string Issues1716Rgb161616BitLittleEndian = "Tiff/Issues/Issue1716.tiff";

tests/Images/Input/Tiff/flower-miniswhite-32.tiff

Lines changed: 0 additions & 3 deletions
This file was deleted.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
version https://git-lfs.github.com/spec/v1
2-
oid sha256:64c948aa03bc4a24cd1d68bb18b5031c119936154a90f1cb1d9aaabd854c5d9b
2+
oid sha256:17139bc00d9fe2905fbac9226120d2823ea17a10a39b140970122153ec23265d
33
size 12778
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
version https://git-lfs.github.com/spec/v1
2+
oid sha256:17139bc00d9fe2905fbac9226120d2823ea17a10a39b140970122153ec23265d
3+
size 12778

0 commit comments

Comments
 (0)