在這段代碼中,我創建了透明位圖,但着色了列表測試點中黃色的像素。 我該如何保持透明,但像素要着色或保持原來的顏色,而不是黃色?使用與原始顏色保存不安全的位圖寫入透明度?
private void button2_Click(object sender, EventArgs e)
{
Graphics g;
g = Graphics.FromImage(bmpBackClouds);
g.Clear(Color.Transparent);
g.Dispose();
BitmapData b1 = bmpBackClouds.LockBits(new System.Drawing.Rectangle(0, 0,
bmpBackClouds.Width, bmpBackClouds.Height),
System.Drawing.Imaging.ImageLockMode.ReadWrite,
System.Drawing.Imaging.PixelFormat.Format32bppArgb);
int stride = b1.Stride;
int i;
System.IntPtr Scan0 = b1.Scan0;
unsafe
{
byte* p;
for (i = 0; i < testpoints.Count; i++)
{
p = (byte*)(void*)Scan0;
p += (int)testpoints[i].Y * stride + (int)testpoints[i].X * 4;
p[1] = p[2] = (byte)255;
p[0] = (byte)0;
p[3] = (byte)255;
}
}
bmpBackClouds.UnlockBits(b1);
bmpBackClouds.Save(@"c:\temp\yellowbmpcolor.png", ImageFormat.Png);
}
'p [3] =(byte)255;'使像素不透明。將其改爲'p [3] =(byte)0;'使其變爲透明。請勿觸摸其他字節以保持其原始顏色。 – TaW 2014-09-28 08:26:15
我將它改爲p [3] =(byte)0;我現在在硬盤上得到的是空白的黑色圖像,當我編輯它時,我看到它全部沒有任何內部的白色。也許我的東西是如何在構造函數中第一次啓動bmpBackClouds? bmpBackClouds =新的位圖(pictureBox1.Width,pictureBox1.Height,PixelFormat.Format32bppArgb); – 2014-09-28 10:17:50
什麼是'testPoints'? – TaW 2014-09-28 10:26:11