【问题标题】:Draw Bitmap with alpha channel使用 Alpha 通道绘制位图
【发布时间】: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 通道,我只想复制像素。

【问题讨论】:

    标签: c# .net windows gdi+ gdi


    【解决方案1】:

    在绘制图像之前将Graphics.CompositingMode 设置为CompositingMode.SourceCopy

    【讨论】:

      猜你喜欢
      • 2010-09-23
      • 2013-07-11
      • 1970-01-01
      • 2012-03-28
      • 1970-01-01
      • 2018-02-11
      • 2012-03-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多