「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側で透明度を調整する方法については)なかなか見つからない。
|