Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Graphics.DrawImage()创建一个空白图像_C#_.net - Fatal编程技术网

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

C# Graphics.DrawImage()创建一个空白图像,c#,.net,C#,.net,我正在尝试使用Graphics.DrawImage()复制位图的一部分;但是,副本是一个空白图像。每个像素都有一个零值。为了调试这个问题,我创建了一个简单的单元测试来演示这个问题 为什么新位图中的所有像素都是0 [Test] public void CopyImage() { // Create a dummy bitmap using a counter. Bitmap bitmap = new Bitmap(3, 3);

我正在尝试使用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++;
            }
        }
    }
[测试]
public void CopyImage()
{
//使用计数器创建虚拟位图。
位图位图=新位图(3,3);
int color=0;
对于(int y=0;y<3;y++)
{
对于(int x=0;x<3;x++)
{
SetPixel(x,y,Color.FromArgb(Color));
颜色++;
}
}
//复制位图
位图newBitmap=新位图(3,3);
Graphics g=Graphics.FromImage(newBitmap);
g、 DrawImage(位图,新点(0,0));
g、 Save();
//验证位图是否正确复制。
//所有像素的ARGB值均为0,因此
//断言失败。
颜色=0;
对于(int y=0;y<3;y++)
{
对于(int x=0;x<3;x++)
{
AreEqual(color,newBitmap.GetPixel(x,y).ToArgb());
颜色++;
}
}
}

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

Color.FromArgb(0x78FF0000)
否则,在0和255之间传递红色、绿色和蓝色的三个值,并使用0、100、200等值查看差异:

Color.FromArgb(255, 0, 0)

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

Color.FromArgb(0x78FF0000)
否则,在0和255之间传递红色、绿色和蓝色的三个值,并使用0、100、200等值查看差异:

Color.FromArgb(255, 0, 0)

代码只是使用Color.FromArgb()创建了不好的颜色。A保持为0,因此像素是透明的。没什么可看的。GDI+利用这一点优化布点。最终的结果是正确的,仍然没有看到任何东西。@HansPassant你完全正确。我更新了代码,为a设置了一个非零值,它成功了。如果您将此作为答案发布,我将接受。代码只是使用Color.FromArgb()创建了不好的颜色。A保持为0,因此像素是透明的。没什么可看的。GDI+利用这一点优化布点。最终的结果是正确的,仍然没有看到任何东西。@HansPassant你完全正确。我更新了代码,为a设置了一个非零值,它成功了。如果你将此作为答复,我将接受。