代码之家  ›  专栏  ›  技术社区  ›  Paya

用alpha通道绘制位图

  •  0
  • Paya  · 技术社区  · 16 年前

    我有一个 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);
    }
    

    霍维尔 DrawImageUnscaled 复制像素并应用alpha通道,因此alpha==0的像素不会有任何效果。但我需要原始字节拷贝,所以alpha==0的像素也会被拷贝。所以这些手术的结果应该是 e.Graphics 包含 位图 . 怎么做?

    总结: 在绘制位图时,我不想应用alpha通道,我只想复制像素。

    1 回复  |  直到 16 年前
        1
  •  4
  •   Matti Virkkunen    16 年前

    集合 Graphics.CompositingMode CompositingMode.SourceCopy 在画你的形象之前。

    推荐文章