加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-17 07:29:53 所属栏目:百科 来源:网络整理
导读:我有一个掩码位图(bmpMask),我正在绘制到目标位图(bmpDest).两个位图都有alpha通道,但已经充满了不透明的内容. 我想要做的是在bmpMask上使用GDI’Draw …’方法生成透明区域,以便当我在其上绘制bmpMask时bmpDest显示. 当然gMask.DrawLine(Pens.Transparent,y
我有一个掩码位图(bmpMask),我正在绘制到目标位图(bmpDest).两个位图都有alpha通道,但已经充满了不透明的内容.

我想要做的是在bmpMask上使用GDI’Draw …’方法生成透明区域,以便当我在其上绘制bmpMask时bmpDest显示.

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

但我想要做的是发出一个draw方法,它将改变bmpMask的alpha通道,使其在绘制到bmpDest时是透明的.我知道我可以使用SetPixel或更快速的不安全或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,y)
    g1.CompositingMode = Drawing2D.CompositingMode.SourceOver

CompostingMode是关键!我终于试图在我的程序中再次修复这个缺点,谷歌搜索出现了这个与我搜索的内容无关的项目(嘿,谷歌可以读懂你的想法).

Is Graphics.DrawImage too slow for bigger images?

精彩!现在10块钱说,整个世界上没有人读过这个. 755

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读