此問題的示例代碼在很大程度上是不言自明的,所以:爲什麼Image.Clear(x)之後的顏色不完全等於顏色x?
[Fact]
private void Color_in_should_equal_color_out()
{
var bitmap = new Bitmap(128,128,PixelFormat.Format32bppArgb);
var color = Color.FromArgb(30,60,90,120);
using (var g = Graphics.FromImage(bitmap))
{
g.Clear(color);
}
var result = bitmap.GetPixel(0,0);
Assert.Equal(color, result);
}
在這種情況下我會期待背景的顏色是相同的,以我清除它的顏色。相反,我得到這個:
Assert.Equal() Failure
Expected: Color [A=30, R=60, G=90, B=120]
Actual: Color [A=30, R=59, G=93, B=119]
這怎麼可能?
一些通:
Color.FromArgb(0, 0, 0, 0);
Color.FromArgb(255, 255, 255, 255);
一些更多的例子是失敗的:
Expected: Color [A=32, R=64, G=96, B=128]
Actual: Color [A=32, R=63, G=95, B=127]
Expected: Color [A=128, R=192, G=32, B=16]
Actual: Color [A=128, R=191, G=31, B=15]
Expected: Color [A=32, R=192, G=127, B=90]
Actual: Color [A=32, R=191, G=127, B=87]
PS:並不認爲這是重複的,我能找到的最接近的匹配是http://stackoverflow.com/questions/721324/using-toargb-followed-by-fromargb-does-not-result-in-the-original-顏色和http://stackoverflow.com/questions/2032398/why-does-color-isnamedcolor-not-work-when-i-create-a-color-using-color-fromargb – nathanchere