我一直在使用GDI創建位圖+。我是到使用GDI Drawtext.Using的drawText該位圖繪製文本我無法適用tranparency。 任何幫助或代碼將不勝感激。透明度文本在GDI
回答
如果你想繪製文本沒有背景填充,SetBkMode(hdc,TRANSPARENT)
會告訴GDI繪製文本何時離開的背景。
要實際渲染帶alpha的文本的前景色...將會變得更加複雜。 GDI實際上並不支持所有在其API中廣泛使用的alpha通道。 AlphaBlend之外,其實它只保留頻道。它實際上無效的將COLOREF的高位設置爲alpha值,因爲高位字節實際上用於標誌以指示COLOREF是否(而不是RGB值)調色板條目。
所以,很遺憾,你的唯一真正的前進方式是:
- 創建一個32位的DIBSection。 (CreateDIBSection)。這給你一個保證能夠保存alpha信息的HBITMAP。如果通過其他位圖創建函數之一創建位圖,則它將位於設備colordepth,該位置可能不是32bpp。
- DrawText到DIBSection上。
- 當您創建的DIBSection你有一個指向實際內存。此時您需要查看內存並設置alpha值。我不認爲DrawText本身會對alpha通道本身做任何事情。林思位圖的每個DWORD的RGB分量的簡單的檢查 - 如果theyre於地面的顏色,改寫用50%(或其他)的DWORD阿爾法在α字節,如果theyre背景顏色,以100%的改寫alpha字節中的alpha。 *
- AlphaBlend位圖到最終目的地。 AlphaBlend要求源中的alpha通道被預倍增。
* 這可能足以簡單地做DrawText的前50%的α-memset的的的DIBSection,並確保BKColor是黑色的。我不知道DrawText可能會對alpha通道做什麼。需要進行一些實驗。
感謝您的回覆。我已經使用了這種方法。使用這個文本被繪製到矩形tranparently.But我想申請透明(alpha)的文本繪製這是不可能使用SetTextColor方法。 由於SetTextColor忽略了Color的Alpha值,我已經通過了一些應用程序使用掩碼位圖來應用透明度,但是我沒有得到想要的結果。我不想將透明度應用於位圖,我想將透明度應用於繪製到位圖上的文本。 任何幫助表示讚賞 – VideoDev 2009-08-28 05:21:38
這個想法是,繪製到一個黑色的位圖,而不是一個信息位圖上的位圖。在對文本進行blitting之後,您可以掃描位圖中的非黑色像素,並根據是否部分文本調整每個像素的Alpha通道。 – 2009-09-22 07:31:32
Hmmmm - 試圖做同樣在這裏 - 想 - 我看到,當你創建一個DIB部分蜉指定「口罩」這是一個R,G,B(和alpha)面具。
IF和那大的,如果它真的不會改變阿爾法chhannel,那麼你可以指定不同的面具兩個位圖頭。 ONe在適當的位置指定thr RGB,另一個使得它們都將其位分配給alpha通道。 (在這種情況下,將文本顏色設置爲白色),然後渲染兩遍,一個加載顏色值,另一個加載alpha值。
????反正只是沉思:)
雖然這個問題的目的是使文字半透明的,我有相反的問題。
DrawText的爲使文字在我的分層窗口(UpdateLayeredWindow)半透明......我不希望它是。
看看這個其他question ...因爲在其他問題,我發佈一些代碼,你可以很容易地修改...幾乎正是克里斯貝克在他的回答中所暗示的。
簡便解決方案:)
有這個問題,我試圖改變α值和預乘,但有另一個問題 - 在沒有正確(難看邊緣)所示抗鋸齒和ClearType字體。所以我做了什麼......
- 撰寫的場景(位圖,圖形等)
- 的BitBlt需要從矩形這個場景(與您的文本矩形,從那裏你希望你的文字的地方)到存儲器DC,在0,0目標座標處選擇兼容位圖
- 將文本繪製到內存DC中的矩形。
- 現在AlphaBlend該BLENDFUNCTION中沒有AC_SRC_ALPHA的矩形以及從該內存DC中的所需SourceConstantAlpha返回到場景DC。
我覺得你得到它:)
特定情況的限制答案:
如果你有一個alpha通道的圖形,你想在本地不透明背景繪製不透明文本,首先使用CreateDIBPatternBrushPt
創建32位畫筆,準備32位位圖。然後掃描反轉Alpha通道的位圖位,按照通常的方式繪製文本(包括SetBkMode
至TRANSPARENT
),然後再次反轉位圖中的alpha。如果反轉筆刷的Alpha,則可以跳過第一個反轉。
- 1. 不透明度的文本透明度CSS
- 2. GDI對象HBRUSH半透明
- 3. 保存在GDI +或WPF透明的GIF
- 4. 如何在GDI中控制TextureBrush的不透明度+
- 5. 不透明的背景,但沒有不透明度文本
- 6. 段落中的不透明度變化改變了文本的不透明度和背景不透明度
- 7. 透明度營業時間文本
- 8. CSS不透明度和文本問題
- 9. 整體SVG不透明度/透明度
- 10. 文本透明div
- 11. 使用GDI創建透明位圖?
- 12. 如何使用GDI繪製透明BMP +
- 13. C++ GDI +的透明分層窗口
- 14. 文字透明度Allegro 5
- 15. UILabel透明度
- 16. NSImage透明度
- 17. NSImage +透明度?
- 18. wmode透明度?
- 19. PNG透明度
- 20. 與透明度
- 21. LWJGL透明度
- 22. 與透明度
- 23. 不透明度
- 24. android.View透明度
- 25. AppBarLayout透明度
- 26. noUiSlider透明度
- 27. wpf透明度
- 28. 透明度
- 29. ListView透明度
- 30. 如何使文本在DIV較低的不透明度在HTML
首選語言? C,C++,VB.net,C#? – 2009-08-27 10:37:22
首選將是純Windows API/C++ – VideoDev 2009-08-27 13:10:56
是GDI +一個錯字? – 2009-08-27 20:27:29