2017-09-26 96 views
0

我想使用Graphics.DrawImage()复制一部分位图;但是,副本是空白图像。每个像素都有一个零值。为了调试这个问题,我创建了一个简单的单元测试来演示这个问题。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++; 
      } 
     } 
    } 
+3

的代码只是Color.FromArgb产生不良的颜色()。 A保持为0,因此像素是透明的。没什么可看的。 GDI +利用这一点来优化分块。最终结果是正确的,仍然没有看到。 –

+0

@HansPassant你是对的。我更新了代码来为A设置非零值,并且它工作正常。如果您发布这个答案,我会接受。 –

回答

3

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

Color.FromArgb(0x78FF0000) 

否则通红,绿三个值,0和255和使用价值之间的蓝色如0,100,200,看一个区别:

Color.FromArgb(255, 0, 0)