gpt4 book ai didi

.net - 在 GDI+ 中绘制一个形状,用透明度覆盖不透明像素

转载 作者:行者123 更新时间:2023-12-01 10:14:42 25 4
gpt4 key购买 nike

我有一个蒙版位图 (bmpMask),我正在将其绘制到目标位图 (bmpDest) 上。两个位图都有 Alpha channel ,但已经充满了不透明的内容。

我想做的是在 bmpMask 上使用 GDI+ 'Draw...' 方法生成透明区域,这样当我在其上绘制 bmpMask 时,bmpDest 就会显示出来。

当然 gMask.DrawLine(Pens.Transparent, 0, y, wMax, y) 不会导致 bmpMask 发生任何变化,因为 GDI+ 按设计工作并且在透明时不会绘制任何内容。即使是半透明颜色,也只会更新 bmpMask 像素的 r,g,b 值。

但我想做的是发出一个绘制方法,该方法将改变 bmpMask 的 alpha channel ,因此在绘制到 bmpDest 时它是透明的。我知道我可以使用 SetPixel 或更快的 unsafe 或 Marshall 替代方案来做到这一点,但这会导致更复杂的解决方案。谢谢。

最佳答案

3 年后找到“答案”!

我从来没有尝试过 Dan 的解决方案,所以我不想放弃它,但这正是我想要的:

    ' (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 是关键!我终于尝试在我的程序中再次修复这个缺陷,而谷歌搜索出现了这个与我搜索的内容无关的项目(嘿,谷歌可以读懂你的想法)。

Is Graphics.DrawImage too slow for bigger images?

太棒了!现在 10 美元说,全世界没有人读过这个。 755

关于.net - 在 GDI+ 中绘制一个形状,用透明度覆盖不透明像素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2329898/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com