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++や画像生成に関しては経験がありません。
お礼
himajin100000様 ありがとうございます。 今できました! GraphicConverterという変換ツールをダウンロードをし、 作成したPNGに対し 「透明性のアルファチャンネル」を作成コマンド実行後 保存を行い、そのファイルを使うことで 実機でも透過出来ました。 とても助かりました、ありがとうございました・