• <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>

            yehao's Blog

            透明位圖的顯示的原理

            對于透明位圖顯示,GDI有現(xiàn)成的函數(shù)TransparentBlt可以完成,在這我們自己寫代碼實現(xiàn)類似TransparentBlt的功能。

                    為了說明這個透明位圖顯示的原理,我們就用一個最簡單的單一色的圖來說明:我們在一張背景色為紅色RGB(255,0,0)的圖片上繪制一個藍(lán)色RGB(0,0,255)的圓,其中透明色為粉紅RGB(255,0,255).如下圖

            透明位圖的顯示的原理 - 過客 - 過☆客

            1)為繪制的圖片創(chuàng)建遮罩圖層。創(chuàng)建一個與要繪制的圖片大小相同的1位單色位圖,要繪制的地方為黑色,透明的地方為白色。如圖:

            透明位圖的顯示的原理 - 過客 - 過☆客

                   這步用代碼很容易實現(xiàn),創(chuàng)建一個1位單色位圖上,以透明色為背景,以非透明色為畫筆色,將要繪制的圖片畫一遍就可以了。

            //創(chuàng)建位圖的遮罩圖層
             HBITMAP hmask=CreateBitmap(256,256,1,1,NULL);
             HDC maskhdc=CreateCompatibleDC(NULL);

             SelectObject(Chdc,hbit);
             SelectObject(Chdc1,hbit1);
             SelectObject(maskhdc,hmask);

             //設(shè)置遮罩圖層背景顏色
             SetBkColor(Chdc1,RGB(255,0,255));

             //生成遮罩位圖
             BitBlt(maskhdc,0,0,256,256,Chdc1,0,0,SRCCOPY);

            2)用要繪制的圖片與背景圖片做異或運(yùn)算,得到的圖片

            要透明色的區(qū)域:紅RGB(255,0,0) XOR 粉紅RGB(255,0,255) = 藍(lán)色RGB(0,0,255)

            繪制區(qū)域:紅RGB(255,0,0) XOR 藍(lán)RGB(,0,255) = 粉紅RGB(0,0,255),如下圖:

            透明位圖的顯示的原理 - 過客 - 過☆客

            //目的和源做異或(XOR)運(yùn)算
               BitBlt(backhdc,0,0,256,256,Chdc1,0,0,SRCINVERT);

            3)用遮罩位圖與上步完成的圖片做與運(yùn)算,得到的圖片

            要透明色的區(qū)域:藍(lán)RGB(0,0,255) AND 白RGB(255,255,255) = 藍(lán)色RGB(0,0,255)

            繪制區(qū)域:粉紅RGB(255,0,255) AND 黑RGB(0,0,0) = 黑色RGB(0,0,0),如下圖:

            透明位圖的顯示的原理 - 過客 - 過☆客

               //目的和源做異或(XOR)運(yùn)算
               BitBlt(backhdc,0,0,256,256,Chdc1,0,0,SRCINVERT);

            4)用要繪制的圖片與上步完成的圖片做異或運(yùn)算,得到的圖片

            要透明色的區(qū)域:藍(lán)RGB(0,0,255) XOR 粉紅RGB(255,0,255) = 紅色RGB(255,0,0)

            繪制區(qū)域:黑RGB(0,0,0) XOR 藍(lán)RGB(0,0,255) = 藍(lán)RGB(0,0,255),如下圖:透明位圖的顯示的原理 - 過客 - 過☆客

            //目的和源做異或(XOR)運(yùn)算
               BitBlt(backhdc,0,0,256,256,Chdc1,0,0,SRCINVERT);

                    這樣就完成了透明位圖的顯示了,原理和方法就是這樣,用這樣的方法可以擴(kuò)展到非單色位圖上來。在這就不多談了,自己去試試就知道了,最后附上這個單色透明位圖的源代碼:

                VDISK下載 

            posted on 2011-06-12 07:55 厚積薄發(fā) 閱讀(1150) 評論(0)  編輯 收藏 引用 所屬分類: Windows編程

            導(dǎo)航

            <2025年6月>
            25262728293031
            1234567
            891011121314
            15161718192021
            22232425262728
            293012345

            統(tǒng)計

            常用鏈接

            留言簿

            隨筆分類

            文章分類

            文章檔案

            搜索

            最新評論

            99久久久精品免费观看国产| 国产精品免费久久久久影院| 久久精品国产男包| 无码国内精品久久人妻麻豆按摩| 日韩美女18网站久久精品| 国内精品伊人久久久影院| 狠狠色丁香久久婷婷综| 三级韩国一区久久二区综合| 少妇高潮惨叫久久久久久| 亚洲精品国产成人99久久| 欧美日韩精品久久免费| 色综合久久久久| 色偷偷偷久久伊人大杳蕉| 99久久免费国产精品| 亚洲中文久久精品无码ww16| 久久精品国产72国产精福利| 人妻少妇久久中文字幕| 无码8090精品久久一区| 国产成人精品久久一区二区三区av | 九九99精品久久久久久| 一本久久精品一区二区| 伊人久久大香线焦综合四虎| 亚洲AV无码久久精品成人| 久久免费大片| 精品99久久aaa一级毛片| 精品久久久久久久无码| 久久久久久精品无码人妻| 久久无码精品一区二区三区| 伊人久久大香线蕉影院95| 久久天天躁狠狠躁夜夜网站| 久久久亚洲裙底偷窥综合| 久久无码精品一区二区三区| 久久精品无码一区二区app| 亚洲国产精品久久久久久| 久久99国产乱子伦精品免费| 无码日韩人妻精品久久蜜桃| 77777亚洲午夜久久多人| 伊人久久综合无码成人网| 亚洲色欲久久久综合网东京热| 亚洲中文字幕久久精品无码APP| 狠狠综合久久AV一区二区三区|