• <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通道的線條繪制?
            大家的答案當然是否定的,很多人推薦用GDI+。

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

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

            實際上我們可以利用系統的這個特性,結合AlphaBlend函數實現alpha通道的文字和矢量圖形繪制。

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

            通過上面這種方法, 我們可以實現帶alpha通道的矢量和文字繪制,我猜測GDI+應該也是通過類似這種修改像素的方法實現的。

            當然,這種方法因為效率問題, 建議一些簡單的繪制可以考慮 (如果不想引入GDI+), 如果大規模應用就要仔細斟酌了。

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

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

            FeedBack:
            # re: 如何基于純GDI實現alpha通道的矢量和文字繪制
            2014-08-26 10:44 | 語音群呼
            支持下!語音群呼www.huixun35.com  回復  更多評論
              
            # re: 如何基于純GDI實現alpha通道的矢量和文字繪制
            2014-09-07 17:34 | bukebushuo
            設置0xFF那一步沒必要  回復  更多評論
              
            # re: 如何基于純GDI實現alpha通道的矢量和文字繪制
            2014-11-16 10:56 | cosim
            是哪個QQ群?  回復  更多評論
              
            精品久久久无码21p发布| 99久久国产综合精品成人影院| 久久精品国产亚洲Aⅴ香蕉| 国产精品成人久久久久三级午夜电影 | 久久国产乱子伦精品免费午夜| 久久精品成人欧美大片| 久久久无码精品亚洲日韩蜜臀浪潮| 亚洲中文字幕无码久久精品1| 久久Av无码精品人妻系列| 亚洲综合久久综合激情久久| 欧美精品一区二区久久| 国产一级持黄大片99久久| 香蕉久久久久久狠狠色| 精品综合久久久久久888蜜芽| 精品久久久久久无码免费| 久久精品欧美日韩精品| 亚洲天堂久久久| www亚洲欲色成人久久精品| 亚洲综合伊人久久大杳蕉| 久久久精品久久久久特色影视| 久久亚洲春色中文字幕久久久| 伊人久久大香线蕉精品不卡| 久久精品一区二区三区不卡| 亚洲国产另类久久久精品| 亚洲&#228;v永久无码精品天堂久久| 久久综合九色综合网站| 狠狠综合久久综合88亚洲| 亚洲一级Av无码毛片久久精品| 99久久亚洲综合精品成人| 国产亚洲色婷婷久久99精品| 亚洲国产另类久久久精品小说| 久久久久国产精品嫩草影院| 色综合久久天天综线观看| 久久国产精品免费一区| 精品久久久久久国产三级 | 久久精品国产欧美日韩99热| 狠狠色丁香婷婷综合久久来来去| 久久精品国产亚洲AV无码麻豆| 亚洲精品高清国产一线久久| 亚洲精品无码久久一线| 日韩av无码久久精品免费|