VC++でのアイコン背景透過について
VC++2013 MFC環境です。
プログラムで○や×などの記号のアイコンを描画し、PNG,GIF,JPEGの形式でファイルに保存したいです。その時、アイコンの背景を透過したいのですがうまくいきません。
CDCクラスとCImageクラスを使用しアイコンの出力をしています。
背景透過について調べていくつか使えそうな関数があり試したのが、TransparentBltという関数で、デバイスコンテキストを二つ用意して、片方に記号を描画し、透過したい色を指定してもう片方にコピーすると指定した色が透過になる?と解釈しプログラム組みましたが結果は真っ黒の画像でした。
ここで完全に手が止まってしまい、質問させていただきます。
以下ソース
CImage Image, image2;
Image.Create( 50, 50, 24 );
image2.Create( 50, 50, 24 );
CDC* pDC = CDC::FromHandle( Image.GetDC( ) );
CDC* pdc2 = CDC::FromHandle( image2.GetDC( ) );
CRect rect( 0, 0, 50, 50 );
CPen BlackPen( PS_SOLID, 3, RGB( 0, 0, 0 ) );
CBrush WhitBrush( RGB( 255, 255, 255 ) );
CBrush BlackBrush( RGB( 0, 0, 0 ) );
pDC->FillRect( &rect, &WhitBrush );
pDC->SelectObject( &BlackPen );
pDC->SelectObject( &WhitBrush );
pDC->Ellipse( 5, 5, 45, 45 );
COLORREF col = Image.GetPixel( 0, 0 );
pdc2->TransparentBlt( 0, 0, 50, 50, pDC, 0, 0, 50, 50, col );
Image.SetTransparentColor( col );
image2.Save( L"c:\\icon\\maru.png" );
Image.ReleaseDC( );
image2.ReleaseDC( );
他にも実装例があれば教えてください。
C++や画像生成に関しては経験がありません。
お礼
回答ありがとうございます。 BOOL CFadeOutView::OnEraseBkgnd(CDC* pDC) { // TODO : ここにメッセージ ハンドラ コードを追加するか、既定の処理を呼び出します。 return 0; } としましたら、きれいに描画されました。 後は、何とかがんばって見ます。 本当にありがとうございました。