<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
      厚積薄發
      海納百川,有容乃大
      今天有人在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 13:51  Richard Wei  閱讀(878)  評論(0)    收藏  舉報

      主站蜘蛛池模板: 大胸美女被吃奶爽死视频| 亚洲精品成人无限看| 九九热视频在线观看一区| 国产一码二码三码区别| 红原县| 内射无套内射国产精品视频| 久久热精品视频在线视频| 免费无码高H视频在线观看| 久久亚洲国产精品久久| 真实国产老熟女无套中出| 亚洲精品综合网二三区| 西西人体44www大胆无码| 日韩中文字幕综合第二页| 高清中文字幕一区二区| 亚洲精品无amm毛片| 国产女人18毛片水真多1| 国产精品国三级国产专区| 欧美成人精品三级网站视频| 精品久久久久久中文字幕202| 国产不卡一区不卡二区| 99精产国品一二三产品香蕉| 久久天天躁夜夜躁狠狠 ds005.com | 国产网曝门亚洲综合在线| 亚洲人成电影网站色mp4| 亚洲精品综合网中文字幕| 小嫩批日出水无码视频免费| 利津县| 欧美丰满熟妇乱XXXXX网站| 精品一区二区不卡无码AV| 嘉荫县| 色成人精品免费视频| 精品熟女亚洲av在线观看| 99久久婷婷国产综合精品青草漫画 | 国产一级精品在线免费看| 国产一区二区av天堂热| 久久精品国产亚洲av品| 男女性高爱潮免费网站| 日韩不卡手机视频在线观看| 成人精品一区二区三区四| 无码日韩做暖暖大全免费不卡| 欧美高清精品一区二区|