「Windows API/画像の操作」の版間の差分

削除された内容 追加された内容
GDI+のサンプルコードを作成したので追記。
編集の要約なし
127 行
 
== GDI+ ==
PNG画像やJPEG画像を描画したい場合、GDI+をインクルードすると、比較的に簡便なコードで済むようになる。
 
=== 入門 ===
単に
<source lang=c>
190 ⟶ 192行目:
 
:※ wikiでは、なんかダミー変数側の「graphics」「image」などが青文字にハイライトされたりして、いかにも型名っぽく見えるかもしれない。だが、Visual Studio では、ここの部分は黒文字になる。
 
=== 画像を2枚以上表示したい場合 ===
 
単に、下記のように、繰り返しで、
 
<source lang=c>
// 画像の読み込み「image」は変数名。
Image ○○(L"test.png");
// 画像の描画。 ダミー変数 graphics を仲介して描画する必要がある.
graphics.DrawImage(&○○, 0, 0, ○○.GetWidth(), ○○.GetHeight());
</source>
 
の部分を必要な画像の枚数と同じ回数だけ、繰り返せばいい。
 
 
つまり、コード例は、
 
<source lang=c>
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
// TODO: HDC を使用する描画コードをここに追加してください...
 
 
Rectangle(hdc, 50, 50, 200, 150); // 描画
 
 
// GDI+ の初期化
GdiplusStartupInput gdiplusStartupInput; // MSDNにそのままのコードがある.
ULONG_PTR gdiplusToken;
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
 
// 以上、MSDN からの引用.
 
// Graphics 型の命令の読み込みのためにダミー変数 graphics を宣言.
Graphics graphics(hdc);
 
 
// 画像の読み込み「image1」は変数名。
Image image1(L"background.png");
 
// 画像の描画。 ダミー変数 graphics を仲介して描画する必要がある.
graphics.DrawImage(&image1, 0, 0, image1.GetWidth(), image1.GetHeight());
 
 
// 画像の読み込み「image2」は変数名。
Image image2(L"fllter.png");
 
// 画像の描画。 ダミー変数 graphics を仲介して描画する必要がある.
graphics.DrawImage(&image2, 0, 0, image2.GetWidth(), image2.GetHeight());
 
EndPaint(hWnd, &ps);
}
break;
</source>
 
のようになる。
 
 
=== 画像を半透明にしたい場合 ===
 
あらかじめ、半透明にさせたい側の画像を、画像編集ソフトで半透明にしておけば、コマンド ○○.DrawImage のときに自動で半透明にしてくれる。
 
 
たとえば、もしも、不透明の背景 background.png に、半透明の黒フィルター filter.png を載せたい場合、
 
png画像を編集できるなんらかの画像編集ソフトで、そのまま半透明の画像を作成しておけば、あとは上記のコードを実行するだけで、半透明フィルターを載せてくれる。
 
 
あとから描画された画像のほうが画像レイヤーでは上層に来るので、載せるフタ側の画像(例の場合ではfilter.png)をあとから描画命令をする必要がある。
 
 
:※ ひょっとしたwin32API側で透明度を調整する事も可能かもしれないが、あまり簡単な方法が普及しておらず、ネットで調べても、(win32API側で透明度を調整する方法については)なかなか見つからない。