Skip to content

Commit c3feb6c

Browse files
committed
fix some ImageSharp color casting
1 parent 03d0a97 commit c3feb6c

2 files changed

Lines changed: 20 additions & 17 deletions

File tree

IronSoftware.Drawing/IronSoftware.Drawing.Common.Tests/UnitTests/ColorFunctionality.cs

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -399,20 +399,20 @@ public void Cast_ImageSharp_Rgb24_to_Color()
399399
[FactWithAutomaticDisplayName]
400400
public void Cast_ImageSharp_Rgb48_from_Color()
401401
{
402-
var imgColor = new SixLabors.ImageSharp.PixelFormats.Rgb48(255, 0, 0);
402+
var imgColor = new SixLabors.ImageSharp.PixelFormats.Rgb48(65535, 0, 0);
403403
Color red = imgColor;
404404
Assert.Equal(255, red.R);
405405
Assert.Equal(0, red.G);
406406
Assert.Equal(0, red.B);
407407

408-
imgColor = new SixLabors.ImageSharp.PixelFormats.Rgb48(0, 255, 0);
408+
imgColor = new SixLabors.ImageSharp.PixelFormats.Rgb48(0, 65535, 0);
409409
Color green = imgColor;
410410
Assert.Equal(255, green.A);
411411
Assert.Equal(0, green.R);
412412
Assert.Equal(255, green.G);
413413
Assert.Equal(0, green.B);
414414

415-
imgColor = new SixLabors.ImageSharp.PixelFormats.Rgb48(0, 0, 255);
415+
imgColor = new SixLabors.ImageSharp.PixelFormats.Rgb48(0, 0, 65535);
416416
Color blue = imgColor;
417417
Assert.Equal(0, blue.R);
418418
Assert.Equal(0, blue.G);
@@ -423,28 +423,29 @@ public void Cast_ImageSharp_Rgb48_from_Color()
423423
public void Cast_ImageSharp_Rgb48_to_Color()
424424
{
425425
Color color = Color.Red;
426+
//Rgb42 is 16-bit color (0-65535) not (0-255)
426427
SixLabors.ImageSharp.PixelFormats.Rgb48 red = color;
427-
Assert.Equal(255, red.R);
428+
Assert.Equal(65535, red.R);
428429
Assert.Equal(0, red.G);
429430
Assert.Equal(0, red.B);
430431

431432
color = new Color(0, 255, 0);
432433
SixLabors.ImageSharp.PixelFormats.Rgb48 green = color;
433434
Assert.Equal(0, green.R);
434-
Assert.Equal(255, green.G);
435+
Assert.Equal(65535, green.G);
435436
Assert.Equal(0, green.B);
436437

437438
color = new Color("#0000FF");
438439
SixLabors.ImageSharp.PixelFormats.Rgb48 blue = color;
439440
Assert.Equal(0, blue.R);
440441
Assert.Equal(0, blue.G);
441-
Assert.Equal(255, blue.B);
442+
Assert.Equal(65535, blue.B);
442443

443444
color = Color.FromArgb(Convert.ToInt32("1e81b0", 16));
444445
SixLabors.ImageSharp.PixelFormats.Rgb48 imgColor = color;
445-
Assert.Equal(30, imgColor.R);
446-
Assert.Equal(129, imgColor.G);
447-
Assert.Equal(176, imgColor.B);
446+
Assert.Equal(7710, imgColor.R);
447+
Assert.Equal(33153, imgColor.G);
448+
Assert.Equal(45232, imgColor.B);
448449
}
449450

450451
[FactWithAutomaticDisplayName]
@@ -456,14 +457,14 @@ public void Cast_ImageSharp_Rgba64_from_Color()
456457
Assert.Equal(0, red.G);
457458
Assert.Equal(0, red.B);
458459

459-
imgColor = new SixLabors.ImageSharp.PixelFormats.Rgba64(0, 255, 0, 255);
460+
imgColor = new SixLabors.ImageSharp.PixelFormats.Rgba64(0, 65535, 0, 65535);
460461
Color green = imgColor;
461462
Assert.Equal(255, green.A);
462463
Assert.Equal(0, green.R);
463464
Assert.Equal(255, green.G);
464465
Assert.Equal(0, green.B);
465466

466-
imgColor = new SixLabors.ImageSharp.PixelFormats.Rgba64(0, 0, 255, 255);
467+
imgColor = new SixLabors.ImageSharp.PixelFormats.Rgba64(0, 0, 65535, 65535);
467468
Color blue = imgColor;
468469
Assert.Equal(255, green.A);
469470
Assert.Equal(0, blue.R);

IronSoftware.Drawing/IronSoftware.Drawing.Common/Color.cs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1034,7 +1034,7 @@ public static implicit operator SixLabors.ImageSharp.PixelFormats.Rgba32(Color c
10341034
/// <param name="color"><see cref="SixLabors.ImageSharp.PixelFormats.Bgra32"/> will automatically be casted to <see cref="Color"/> </param>
10351035
public static implicit operator Color(SixLabors.ImageSharp.PixelFormats.Bgra32 color)
10361036
{
1037-
return new Color(color.R, color.G, color.B, color.A);
1037+
return new Color(color.A, color.R, color.G, color.B);
10381038
}
10391039

10401040
/// <summary>
@@ -1064,7 +1064,7 @@ public static implicit operator Color(SixLabors.ImageSharp.PixelFormats.Rgb24 co
10641064
/// <param name="color"><see cref="Color"/> is explicitly cast to a <see cref="SixLabors.ImageSharp.PixelFormats.Rgb24"/> </param>
10651065
public static implicit operator SixLabors.ImageSharp.PixelFormats.Rgb24(Color color)
10661066
{
1067-
return SixLabors.ImageSharp.Color.FromRgb(color.R, color.G, color.B);
1067+
return SixLabors.ImageSharp.Color.FromRgba(color.R, color.G, color.B, color.A);
10681068
}
10691069

10701070
/// <summary>
@@ -1094,7 +1094,7 @@ public static implicit operator SixLabors.ImageSharp.PixelFormats.Bgr24(Color co
10941094
/// <param name="color"><see cref="SixLabors.ImageSharp.PixelFormats.Rgb48"/> will automatically be casted to <see cref="Color"/> </param>
10951095
public static implicit operator Color(SixLabors.ImageSharp.PixelFormats.Rgb48 color)
10961096
{
1097-
return new Color(color.R, color.G, color.B);
1097+
return (Color)SixLabors.ImageSharp.Color.FromRgb((byte)(color.R >> 8), (byte)(color.G >> 8), (byte)(color.B >> 8));
10981098
}
10991099

11001100
/// <summary>
@@ -1104,7 +1104,9 @@ public static implicit operator Color(SixLabors.ImageSharp.PixelFormats.Rgb48 co
11041104
/// <param name="color"><see cref="Color"/> is explicitly cast to a <see cref="SixLabors.ImageSharp.PixelFormats.Rgb48"/> </param>
11051105
public static implicit operator SixLabors.ImageSharp.PixelFormats.Rgb48(Color color)
11061106
{
1107-
return new SixLabors.ImageSharp.PixelFormats.Rgb48(color.R, color.G, color.B);
1107+
var result = new SixLabors.ImageSharp.PixelFormats.Rgb48();
1108+
result.FromRgba64((SixLabors.ImageSharp.PixelFormats.Rgba64)color);
1109+
return result;
11081110
}
11091111

11101112
/// <summary>
@@ -1144,7 +1146,7 @@ public static implicit operator Color(SixLabors.ImageSharp.PixelFormats.Abgr32 c
11441146
/// <param name="color"><see cref="Color"/> is explicitly cast to a <see cref="SixLabors.ImageSharp.PixelFormats.Abgr32"/> </param>
11451147
public static implicit operator SixLabors.ImageSharp.PixelFormats.Abgr32(Color color)
11461148
{
1147-
return new SixLabors.ImageSharp.PixelFormats.Abgr32(color.R, color.G, color.B, color.A);
1149+
return SixLabors.ImageSharp.Color.FromRgba(color.R, color.G, color.B, color.A);
11481150
}
11491151

11501152
/// <summary>
@@ -1164,7 +1166,7 @@ public static implicit operator Color(SixLabors.ImageSharp.PixelFormats.Argb32 c
11641166
/// <param name="color"><see cref="Color"/> is explicitly cast to a <see cref="SixLabors.ImageSharp.PixelFormats.Argb32"/> </param>
11651167
public static implicit operator SixLabors.ImageSharp.PixelFormats.Argb32(Color color)
11661168
{
1167-
return new SixLabors.ImageSharp.PixelFormats.Argb32(color.R, color.G, color.B, color.A);
1169+
return SixLabors.ImageSharp.Color.FromRgba(color.R, color.G, color.B, color.A);
11681170
}
11691171

11701172
/// <summary>

0 commit comments

Comments
 (0)