2012-06-10 20 views
5

ネイティブWin32 C++ではアルファ/透明度の値が0.5(つまり透明度が50%)の青い矩形をどのように描画しますか?ネイティブWin32 GDIでわずかに透明な青色の矩形を描画

RGBA()などのマクロを使用すると、ブラシのアルファ値をどのように指定できるかわかりません。

SetDCPenColor(hdc, RGBA(255,255,0,127)); 
SetDCBrushColor(hdc, RGBA(255,255,0,127)); 
Rectangle(hdc, 0, 0, width, height); 

答えて

6

私はあなたがそのようにそれを行うにはGDI+をする必要がありますかなり確信しているが、それはGDIであるはずです:プラス側では

//in rendering function 
using namespace Gdiplus; 
Graphics g (hdc); 
SolidBrush brush (Color (127 /*A*/, 0 /*R*/, 0 /*G*/, 255 /*B*/)); 
g.FillRectangle (&brush, 0, 0, width, height); 

、GDI +、かなりの速さではないが、より大きい能力と視覚的結果を持ち、オブジェクト指向であることも意味します。つまり、SelectObjectDeleteObjectのすべての呼び出しについて心配する必要はありません。

GDI +を使用するためにプログラムを初期化/終了する際にはextra stepsがいくつかあり、すべてがGdiplus名前空間にあり、-lgdiplusにあることに注意してください。

実際にGDIが必要な場合は、私が知っている唯一の解決策はAlphaBlendです。実際には、デバイスコンテキストに図形を描画するよりも複雑な方法です。それはGDI +をまだ使い始めているので、GDI +を使うのはずっと簡単ですし、GDIよりずっと使いやすいです。

+0

私は、GDI +はGDIがそれよりも速くないとは思いませんか? GDIはハードウェアアクセラレーションはされていますが、私が読んだものからはGDI +ではそうではありません。 –

+0

@SethCarnegie、私はあまりそれを読んでいないが、より速いことを思い出した。それを見ると、あなたは正しいと思われます。ただし、GDI +はまだ機能が豊富で、より良い画像を生成します。スピード(と同時に品質)が本当に心配ならば、DirectXは非常に良い候補です。 – chris

+0

はい、GDI +がより良い画像を生成し、より多くの機能を持つことは間違いありません。 +1。 –

関連する問題