Graphics.DrawImage()创建一个空白图像

时间:2017-09-26 17:30:38

标签: c# .net

我试图使用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++;
            }
        }
    }

1 个答案:

答案 0 :(得分:3)

我认为传递给Color.FromArgb(颜色)的颜色值必须大于0,1,2,如果使用一个参数,就像这个十六进制一样可见:

Color.FromArgb(0x78FF0000)

否则在0到255之间传递红色,绿色,蓝色的三个值,并使用0,100,200等值来查看差异:

Color.FromArgb(255, 0, 0)