2010-04-10 12 views
0

J'ai un Format32bppArgb backbuffer, où je dessine quelques lignes:Dessiner Bitmap avec canal alpha

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

Maintenant, je veux copier bitmap en cas Paint. Je le fais comme ceci:

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

hovewer, les pixels et applique le canal alpha DrawImageUnscaled copies, donc pixels avec alpha == 0 n'aura aucun effet. Mais j'ai besoin d'une copie d'octets brute, donc les pixels avec alpha == 0 sont également copiés. Donc, le résultat de ces opérations devrait être que e.Graphics contient l'octet exact de la bitmap. Comment faire ça?

Résumé: Lors de l'élaboration d'un bitmap, je ne veux pas appliquer le canal alpha, je veux simplement copier les pixels.

Répondre