「Windows API/画像の操作」の版間の差分
削除された内容 追加された内容
GDI+のサンプルコードを作成したので追記。 |
|||
20 行
もしPNG画像などを扱いたい場合には、[[w:Graphics Device Interface|GDI+]]をインクルードする必要がある。
単に▼
<source lang=c>▼
#pragma comment(lib,"Gdiplus.lib")▼
#include <ole2.h>▼
#include <gdiplus.h>▼
using namespace Gdiplus;▼
</source>▼
と冒頭に書くだけで、GDI+をインクルードできる。▼
なお、原理的には▼
<source lang=c>▼
#include <ole2.h>▼
#include <gdiplus.h>▼
</source>▼
だけでもインクルードできるが、しかし[https://docs.microsoft.com/ja-jp/windows/win32/api/gdiplusheaders/nf-gdiplusheaders-image-removepropertyitem MSDN『Image::RemovePropertyItem method』 ]にあるGDI+のサンプルコードにある命令のいくつかを使う際に、上述の <code>#pragma comment(lib,"Gdiplus.lib")</code> や <code>using namespace Gdiplus;</code> が必要になる。▼
なお、先に ole2.h をインクルードしないと、コンパイルがエラーになってしまい、識別子 IStreamが定義されていないとか警告を出されてしまう。▼
なので、上述コードの順序どおりに、先に ole2.h をインクルードしてから、あとに gdiplus.h をインクルードする必要がある。▼
146 ⟶ 123行目:
</source>
のように、NULLと関連づけさせてから、削除することで、確実に削除できる。
== GDI+ ==
▲単に
▲<source lang=c>
▲#pragma comment(lib,"Gdiplus.lib")
▲#include <ole2.h>
▲#include <gdiplus.h>
▲using namespace Gdiplus;
▲</source>
▲と冒頭に書くだけで、GDI+をインクルードできる。
▲なお、原理的には
▲<source lang=c>
▲#include <ole2.h>
▲#include <gdiplus.h>
▲</source>
▲だけでもインクルードできるが、しかし[https://docs.microsoft.com/ja-jp/windows/win32/api/gdiplusheaders/nf-gdiplusheaders-image-removepropertyitem MSDN『Image::RemovePropertyItem method』 ]にあるGDI+のサンプルコードにある命令のいくつかを使う際に、上述の <code>#pragma comment(lib,"Gdiplus.lib")</code> や <code>using namespace Gdiplus;</code> が必要になる。
▲なお、先に ole2.h をインクルードしないと、コンパイルがエラーになってしまい、識別子 IStreamが定義されていないとか警告を出されてしまう。
▲なので、上述コードの順序どおりに、先に ole2.h をインクルードしてから、あとに gdiplus.h をインクルードする必要がある。
あらかじめ「test.png」などのPNG画像を用意しておき、それを実行ファイルのソースコードのあるフォルダに入れておく必要がある。
そして、 <code>WM_PAINT:</code> を下記のように書き換える。
書き換えることになるだろう箇所は、
:「 // TODO: HDC を使用する描画コードをここに追加してください...」の下から、
:「EndPaint(hWnd, &ps);」の上まで、
である。
::(動作確認: 2020年4月14日に、下記コードで Visual Studio 2019 にて動作することを確認ずみ)
<source lang=c>
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
// TODO: HDC を使用する描画コードをここに追加してください...
// GDI+ の初期化
GdiplusStartupInput gdiplusStartupInput; // MSDNにそのままのコードがある.
ULONG_PTR gdiplusToken;
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
// 以上、MSDN からの引用.
// Graphics 型の命令の読み込みのためにダミー変数 graphics を宣言.
Graphics graphics(hdc);
// 画像の読み込み「image」は変数名。
Image image(L"test.png");
// 画像の描画。 ダミー変数 graphics を仲介して描画する必要がある.
graphics.DrawImage(&image, 0, 0, image.GetWidth(), image.GetHeight());
EndPaint(hWnd, &ps);
}
break;
</source>
:※ wikiでは、なんかダミー変数側の「graphics」「image」などが青文字にハイライトされたりして、いかにも型名っぽく見えるかもしれない。だが、Visual Studio では、ここの部分は黒文字になる。
|