Skip to content

Commit 55224ec

Browse files
Multiply > divide
1 parent f3ba373 commit 55224ec

9 files changed

+43
-40
lines changed

src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.TiffCmykScalar.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,9 +76,10 @@ public static void ConvertFromRgb(in ComponentValues values, float maxValue, Spa
7676
}
7777
else
7878
{
79-
ctmp = (ctmp - ktmp) / (255F - ktmp);
80-
mtmp = (mtmp - ktmp) / (255F - ktmp);
81-
ytmp = (ytmp - ktmp) / (255F - ktmp);
79+
float divisor = 1 / (255F - ktmp);
80+
ctmp = (ctmp - ktmp) * divisor;
81+
mtmp = (mtmp - ktmp) * divisor;
82+
ytmp = (ytmp - ktmp) * divisor;
8283
}
8384

8485
c[i] = ctmp * maxValue;

src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.TiffCmykVector128.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -83,11 +83,11 @@ public static void ConvertFromRgb(in ComponentValues values, float maxValue, Spa
8383
Vector128<float> ktmp = Vector128.Min(ctmp, Vector128.Min(mtmp, ytmp));
8484

8585
Vector128<float> kMask = ~Vector128.Equals(ktmp, scale);
86-
Vector128<float> divisor = scale - ktmp;
86+
Vector128<float> divisor = Vector128<float>.One / (scale - ktmp);
8787

88-
ctmp = ((ctmp - ktmp) / divisor) & kMask;
89-
mtmp = ((mtmp - ktmp) / divisor) & kMask;
90-
ytmp = ((ytmp - ktmp) / divisor) & kMask;
88+
ctmp = ((ctmp - ktmp) * divisor) & kMask;
89+
mtmp = ((mtmp - ktmp) * divisor) & kMask;
90+
ytmp = ((ytmp - ktmp) * divisor) & kMask;
9191

9292
Unsafe.Add(ref destC, i) = ctmp * scale;
9393
Unsafe.Add(ref destM, i) = mtmp * scale;

src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.TiffCmykVector256.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -83,11 +83,11 @@ public static void ConvertFromRgb(in ComponentValues values, float maxValue, Spa
8383
Vector256<float> ktmp = Vector256.Min(ctmp, Vector256.Min(mtmp, ytmp));
8484

8585
Vector256<float> kMask = ~Vector256.Equals(ktmp, scale);
86-
Vector256<float> divisor = scale - ktmp;
86+
Vector256<float> divisor = Vector256<float>.One / (scale - ktmp);
8787

88-
ctmp = ((ctmp - ktmp) / divisor) & kMask;
89-
mtmp = ((mtmp - ktmp) / divisor) & kMask;
90-
ytmp = ((ytmp - ktmp) / divisor) & kMask;
88+
ctmp = ((ctmp - ktmp) * divisor) & kMask;
89+
mtmp = ((mtmp - ktmp) * divisor) & kMask;
90+
ytmp = ((ytmp - ktmp) * divisor) & kMask;
9191

9292
Unsafe.Add(ref destC, i) = ctmp * scale;
9393
Unsafe.Add(ref destM, i) = mtmp * scale;

src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.TiffCmykVector512.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -92,11 +92,11 @@ internal static void ConvertFromRgbVectorized(in ComponentValues values, float m
9292
Vector512<float> ktmp = Vector512.Min(ctmp, Vector512.Min(mtmp, ytmp));
9393

9494
Vector512<float> kMask = ~Vector512.Equals(ktmp, scale);
95-
Vector512<float> divisor = scale - ktmp;
95+
Vector512<float> divisor = Vector512<float>.One / (scale - ktmp);
9696

97-
ctmp = ((ctmp - ktmp) / divisor) & kMask;
98-
mtmp = ((mtmp - ktmp) / divisor) & kMask;
99-
ytmp = ((ytmp - ktmp) / divisor) & kMask;
97+
ctmp = ((ctmp - ktmp) * divisor) & kMask;
98+
mtmp = ((mtmp - ktmp) * divisor) & kMask;
99+
ytmp = ((ytmp - ktmp) * divisor) & kMask;
100100

101101
Unsafe.Add(ref destC, i) = ctmp * scale;
102102
Unsafe.Add(ref destM, i) = mtmp * scale;

src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.TiffYccKScalar.cs

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -75,9 +75,10 @@ public static void ConvertFromRgb(in ComponentValues values, float halfValue, fl
7575
for (int i = 0; i < cr.Length; i++)
7676
{
7777
// Scale down to [0-1]
78-
float r = rLane[i] / 255F;
79-
float g = gLane[i] / 255F;
80-
float b = bLane[i] / 255F;
78+
const float divisor = 1F / 255F;
79+
float r = rLane[i] * divisor;
80+
float g = gLane[i] * divisor;
81+
float b = bLane[i] * divisor;
8182

8283
float ytmp;
8384
float cbtmp;
@@ -87,15 +88,16 @@ public static void ConvertFromRgb(in ComponentValues values, float halfValue, fl
8788
if (ktmp >= 1F)
8889
{
8990
ytmp = 0F;
90-
cbtmp = 0F;
91-
crtmp = 0F;
91+
cbtmp = 0.5F;
92+
crtmp = 0.5F;
9293
ktmp = maxValue;
9394
}
9495
else
9596
{
96-
r /= 1F - ktmp;
97-
g /= 1F - ktmp;
98-
b /= 1F - ktmp;
97+
float kmask = 1F / (1F - ktmp);
98+
r *= kmask;
99+
g *= kmask;
100+
b *= kmask;
99101

100102
// Scale to [0-maxValue]
101103
ytmp = ((0.299f * r) + (0.587f * g) + (0.114f * b)) * maxValue;

src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.TiffYccKVector128.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ public override void ConvertFromRgb(in ComponentValues values, Span<float> rLane
8686
ref Vector128<float> destK =
8787
ref Unsafe.As<float, Vector128<float>>(ref MemoryMarshal.GetReference(values.Component3));
8888

89-
Vector128<float> maxSourceValue = Vector128.Create(255F);
89+
Vector128<float> maxSourceValue = Vector128.Create(1 / 255F);
9090
Vector128<float> maxSampleValue = Vector128.Create(this.MaximumValue);
9191
Vector128<float> chromaOffset = Vector128.Create(this.HalfValue);
9292

@@ -102,17 +102,17 @@ public override void ConvertFromRgb(in ComponentValues values, Span<float> rLane
102102
nuint n = values.Component0.Vector128Count<float>();
103103
for (nuint i = 0; i < n; i++)
104104
{
105-
Vector128<float> r = Unsafe.Add(ref srcR, i) / maxSourceValue;
106-
Vector128<float> g = Unsafe.Add(ref srcG, i) / maxSourceValue;
107-
Vector128<float> b = Unsafe.Add(ref srcB, i) / maxSourceValue;
105+
Vector128<float> r = Unsafe.Add(ref srcR, i) * maxSourceValue;
106+
Vector128<float> g = Unsafe.Add(ref srcG, i) * maxSourceValue;
107+
Vector128<float> b = Unsafe.Add(ref srcB, i) * maxSourceValue;
108108
Vector128<float> ktmp = Vector128<float>.One - Vector128.Max(r, Vector128.Min(g, b));
109109

110110
Vector128<float> kMask = ~Vector128.Equals(ktmp, Vector128<float>.One);
111-
Vector128<float> divisor = Vector128<float>.One - ktmp;
111+
Vector128<float> divisor = Vector128<float>.One / (Vector128<float>.One - ktmp);
112112

113-
r /= divisor;
114-
g /= divisor;
115-
b /= divisor;
113+
r = (r * divisor) & kMask;
114+
g = (g * divisor) & kMask;
115+
b = (b * divisor) & kMask;
116116

117117
// y = 0 + (0.299 * r) + (0.587 * g) + (0.114 * b)
118118
// cb = 128 - (0.168736 * r) - (0.331264 * g) + (0.5 * b)

src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.TiffYccKVector256.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -108,11 +108,11 @@ public override void ConvertFromRgb(in ComponentValues values, Span<float> rLane
108108
Vector256<float> ktmp = Vector256<float>.One - Vector256.Max(r, Vector256.Min(g, b));
109109

110110
Vector256<float> kMask = ~Vector256.Equals(ktmp, Vector256<float>.One);
111-
Vector256<float> divisor = Vector256<float>.One - ktmp;
111+
Vector256<float> divisor = Vector256<float>.One / (Vector256<float>.One - ktmp);
112112

113-
r /= divisor;
114-
g /= divisor;
115-
b /= divisor;
113+
r = (r * divisor) & kMask;
114+
g = (g * divisor) & kMask;
115+
b = (b * divisor) & kMask;
116116

117117
// y = 0 + (0.299 * r) + (0.587 * g) + (0.114 * b)
118118
// cb = 128 - (0.168736 * r) - (0.331264 * g) + (0.5 * b)

src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.TiffYccKVector512.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -119,11 +119,11 @@ internal static void ConvertFromRgbVectorized(in ComponentValues values, float m
119119
Vector512<float> ktmp = Vector512<float>.One - Vector512.Max(r, Vector512.Min(g, b));
120120

121121
Vector512<float> kMask = ~Vector512.Equals(ktmp, Vector512<float>.One);
122-
Vector512<float> divisor = Vector512<float>.One - ktmp;
122+
Vector512<float> divisor = Vector512<float>.One / (Vector512<float>.One - ktmp);
123123

124-
r /= divisor;
125-
g /= divisor;
126-
b /= divisor;
124+
r = (r * divisor) & kMask;
125+
g = (g * divisor) & kMask;
126+
b = (b * divisor) & kMask;
127127

128128
// y = 0 + (0.299 * r) + (0.587 * g) + (0.114 * b)
129129
// cb = 128 - (0.168736 * r) - (0.331264 * g) + (0.5 * b)

src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.YccKVector512.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,6 @@ protected override void ConvertFromRgbVectorized(in ComponentValues values, Span
138138

139139
/// <inheritdoc/>
140140
protected override void ConvertFromRgbScalarRemainder(in ComponentValues values, Span<float> rLane, Span<float> gLane, Span<float> bLane)
141-
=> TiffYccKScalar.ConvertFromRgb(in values, this.HalfValue, this.MaximumValue, rLane, gLane, bLane);
141+
=> YccKScalar.ConvertFromRgb(in values, this.HalfValue, this.MaximumValue, rLane, gLane, bLane);
142142
}
143143
}

0 commit comments

Comments
 (0)