【发布时间】:2011-02-06 13:27:58
【问题描述】:
我有一个Format32bppArgb 后备缓冲区,我在其中画了一些线:
var g = Graphics.FromImage(bitmap);
g.Clear(Color.FromArgb(0));
var rnd = new Random();
for (int i = 0; i < 5000; i++) {
int x1 = rnd.Next(ClientRectangle.Left, ClientRectangle.Right);
int y1 = rnd.Next(ClientRectangle.Top, ClientRectangle.Bottom);
int x2 = rnd.Next(ClientRectangle.Left, ClientRectangle.Right);
int y2 = rnd.Next(ClientRectangle.Top, ClientRectangle.Bottom);
Color color = Color.FromArgb(rnd.Next(0, 255), rnd.Next(0, 255), rnd.Next(0, 255));
g.DrawLine(new Pen(color), x1, y1, x2, y2);
}
现在我想在Paint 事件中复制bitmap。我是这样做的:
void Form1Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawImageUnscaled(bitmap, 0, 0);
}
但是,DrawImageUnscaled 复制像素并应用 alpha 通道,因此 alpha == 0 的像素不会有任何效果。但我需要原始字节复制,因此 alpha == 0 的像素也会被复制。所以这些操作的结果应该是e.Graphics 包含bitmap 的精确字节副本。该怎么做?
总结:在绘制位图时,我不想应用 alpha 通道,我只想复制像素。
【问题讨论】: