【发布时间】:2018-03-08 00:54:34
【问题描述】:
我正在尝试使用 Graphics.DrawImage() 来复制位图的一部分;但是,副本是空白图像。每个像素都有一个零值。为了调试问题,我创建了一个简单的单元测试来演示该问题。
为什么新位图中的所有像素都是 0?
[Test]
public void CopyImage()
{
// Create a dummy bitmap using a counter.
Bitmap bitmap = new Bitmap(3, 3);
int color = 0;
for (int y = 0; y < 3; y++)
{
for (int x = 0; x < 3; x++)
{
bitmap.SetPixel(x, y, Color.FromArgb(color));
color++;
}
}
// Copy the bitmap
Bitmap newBitmap = new Bitmap(3, 3);
Graphics g = Graphics.FromImage(newBitmap);
g.DrawImage(bitmap, new Point(0, 0));
g.Save();
// Validate the bitmap was copied correctly.
// All pixels have an ARGB value of 0 so the
// asserts fail.
color = 0;
for (int y = 0; y < 3; y++)
{
for (int x = 0; x < 3; x++)
{
Assert.AreEqual(color, newBitmap.GetPixel(x, y).ToArgb());
color++;
}
}
}
【问题讨论】:
-
代码只是用 Color.FromArgb() 创建了不好的颜色。 A 保持为 0,因此像素是透明的。没什么可看的。 GDI+ 利用这一点来优化 blitting。最终结果是正确的,仍然什么都看不到。
-
@HansPassant 你说得对。我更新了代码来为 A 设置一个非零值并且它起作用了。如果您将此作为答案发布,我会接受。