• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            今天有人在QQ群里問GDI能不能支持帶alpha通道的線條繪制?
            大家的答案當(dāng)然是否定的,很多人推薦用GDI+。

            一個(gè)基本的圖形引擎要包括幾個(gè)方面的支持:位圖繪制,文字繪制,矢量繪制(如矩形,線條)。
            可惜GDI這個(gè)20多年前發(fā)明的老古董,對(duì)這幾項(xiàng)的繪制, 除了位圖繪制可以通過AlphaBlend支持alpha通道,其他繪制都不支持alpha通道。
            那有沒有方法讓能通過純GDI讓文字和矢量的繪制也支持alpha通道呢?

            討論這個(gè)問題之前,我們先看一下用GDI函數(shù)在支持alpha通道的DC上繪制會(huì)發(fā)生什么? 這里 有人討論過這個(gè)問題。
            當(dāng)然我們也可以自己測(cè)試,測(cè)試結(jié)果是GDI函數(shù)會(huì)把繪制覆蓋目標(biāo)像素的alpha通道改都改成0, 也 就是說如果畫一條線條, 線條通過的位置的alpha通道都回被改成0。

            實(shí)際上我們可以利用系統(tǒng)的這個(gè)特性,結(jié)合AlphaBlend函數(shù)實(shí)現(xiàn)alpha通道的文字和矢量圖形繪制。

            具體做法大概如下:
            1. 創(chuàng)建內(nèi)存DC和一幅32bit的DIB Section, 將位圖選入DC
            2. 將位圖的所有字節(jié)全都改成0xFF
            3. 在內(nèi)存DC上用文字和矢量 GDI函數(shù) (如DrawText, Rectangle)繪制東西
            4. 遍歷所有像素,發(fā)現(xiàn)alpha通道為0 (表示該區(qū)域被繪制過),則將 alpha通道改成我們需要的alpha值;否則,則將像素的alpha通道改成0 (表示沒有內(nèi)容繪制上去)
            5. 最后通過AlphaBlend將生成好的DIB Section合成繪制到目標(biāo)區(qū)域

            通過上面這種方法, 我們可以實(shí)現(xiàn)帶alpha通道的矢量和文字繪制,我猜測(cè)GDI+應(yīng)該也是通過類似這種修改像素的方法實(shí)現(xiàn)的。

            當(dāng)然,這種方法因?yàn)樾蕟栴}, 建議一些簡(jiǎn)單的繪制可以考慮 (如果不想引入GDI+), 如果大規(guī)模應(yīng)用就要仔細(xì)斟酌了。

            微軟當(dāng)初引入GDI+,部分原因就是因?yàn)镚DI不支持alpha通道,可惜GDI+的效率是如此臭名昭著, 大家大部分時(shí)候都是盡量避免引入,很多時(shí)候我們引入GDI+只是為了使用它的圖像編解碼功能。

            還好技術(shù)總是不斷進(jìn)步,如果你的程序不用考慮XP(現(xiàn)在看來還要過幾年), Vista之后系統(tǒng)為我們提供了高效的圖形支持:
            圖像編解碼可以用WIC,文字操作可以用DirectWrite,圖形渲染可以用Direct2D  (既支持alpha通道,又支持GPU加速), 實(shí)際上IE9之后的瀏覽器都已采用Direct2D開發(fā)。
            posted on 2014-08-26 00:22 Richard Wei 閱讀(5287) 評(píng)論(3)  編輯 收藏 引用 所屬分類: windows desktop

            FeedBack:
            # re: 如何基于純GDI實(shí)現(xiàn)alpha通道的矢量和文字繪制
            2014-08-26 10:44 | 語音群呼
            支持下!語音群呼www.huixun35.com  回復(fù)  更多評(píng)論
              
            # re: 如何基于純GDI實(shí)現(xiàn)alpha通道的矢量和文字繪制
            2014-09-07 17:34 | bukebushuo
            設(shè)置0xFF那一步?jīng)]必要  回復(fù)  更多評(píng)論
              
            # re: 如何基于純GDI實(shí)現(xiàn)alpha通道的矢量和文字繪制
            2014-11-16 10:56 | cosim
            是哪個(gè)QQ群?  回復(fù)  更多評(píng)論
              
            韩国三级中文字幕hd久久精品| 色婷婷噜噜久久国产精品12p| 亚洲AV无码一区东京热久久 | 精品免费久久久久久久| 97久久精品午夜一区二区| 亚洲综合婷婷久久| 中文字幕无码av激情不卡久久| 久久人妻少妇嫩草AV无码专区| 一本久久a久久精品综合夜夜 | 久久国产色AV免费看| 国产免费久久精品丫丫| 婷婷五月深深久久精品| 国产成人精品综合久久久| 亚洲αv久久久噜噜噜噜噜| 91精品观看91久久久久久| 久久AV高潮AV无码AV| 99精品伊人久久久大香线蕉| 久久久久久综合网天天| 2020最新久久久视精品爱 | 久久精品国产精品青草| 久久久久久精品免费免费自慰| 91秦先生久久久久久久| 国内精品久久国产大陆| 国色天香久久久久久久小说| 国产精品亚洲美女久久久| 国产一区二区三区久久| 狠狠色婷婷久久一区二区三区| 久久婷婷五月综合国产尤物app | 国产成人综合久久久久久| 久久―日本道色综合久久| 久久亚洲AV成人出白浆无码国产| 狠狠色丁香久久婷婷综合图片| 国产无套内射久久久国产| 热久久国产精品| 久久综合狠狠色综合伊人| 国产精品九九九久久九九| 国产精品久久久久久久| 久久国产乱子伦精品免费强| 久久青草国产精品一区| 久久99精品久久久久久水蜜桃| 国产高潮国产高潮久久久91 |