我有一个掩码位图(bmpMask),我绘制到目标位图(bmpDest)。这两个位图具有alpha通道,但已经充满了不透明的内容。

我想要做的就是使用产生GDI +透明区域“画......”上bmpMask方法是什么让bmpDest节目通过时,我画bmpMask了它。

当然gMask.DrawLine(Pens.Transparent, 0, y, wMax, y)导致不改变bmpMask,因为GDI +工作原理设计的和透明的,当不绘制任何东西。即使有颜色半透明,仅R,G,bmpMask的像素的B值被更新。

但我想要做的是发出抽签方法,将改变bmpMask的alpha通道,所以当绘制到bmpDest它是透明的。我知道我可以用SetPixel或更快不安全或马歇尔替代做到这一点,但是这将导致一个更复杂的解决方案。感谢。

有帮助吗?

解决方案

找到 '的' 3年后的答案!

我从来没有得到解决,以试图丹的解决方案,所以我不希望从它拿走,但是这不正是我想要的:

    ' (setting composting mode is the key to getting the transparent
    ' line to actually result in setting the pixels to transparent-
    ' instead of just not drawing anything 'because it's transparent dummy' - 
    ' because it turns off the 'math' that is done to cause transparent
    ' image drawing to occur and just verbatim copies the bits).
    g1.CompositingMode = Drawing2D.CompositingMode.SourceCopy
    g1.DrawLine(Pens.Transparent, 0, y, wMax, y)
    g1.CompositingMode = Drawing2D.CompositingMode.SourceOver

CompostingMode是关键!我终于想在我的程序再次解决这个问题缺乏,以及谷歌搜索打开了这个项目有没有做什么,我搜索了(嘿嘿,谷歌可以了解你的心思)。

是Graphics.DrawImage太慢为更大的图像?

奇妙!现在10块钱说,没有人在整个世界不断读取此。 755

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top