2010-04-10 2 views
0

У меня есть Format32bppArgb BackBuffer, где я нарисовать несколько линий:Draw Bitmap с альфа-каналом

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); 
} 

Теперь я хочу, чтобы скопировать bitmap в Paint случае. Я сделать это следующим образом:

void Form1Paint(object sender, PaintEventArgs e) 
{ 
    e.Graphics.DrawImageUnscaled(bitmap, 0, 0); 
} 

Hovewer, то DrawImageUnscaled копирует пикселей и применяет альфа-канал, при этом пиксели с альфа == 0 не будет иметь никакого эффекта. Но мне нужна сырая байтовая копия, поэтому пиксели с альфа == 0 также копируются. Поэтому результатом этих операций должно быть то, что e.Graphics содержит точный байт-экземпляр bitmap. Как это сделать?

Резюме: При рисовании растрового изображения, я не хочу, чтобы применить альфа-канал, я просто хочу, чтобы скопировать пиксели.

ответ