Рисовать растровое изображение с альфа-каналом - PullRequest
0 голосов
/ 10 апреля 2010

У меня есть Format32bppArgb backbuffer, где я рисую несколько линий:

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. Как это сделать?

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

1 Ответ

4 голосов
/ 10 апреля 2010

Установите Graphics.CompositingMode на CompositingMode.SourceCopy перед рисованием изображения.

...