「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 では、ここの部分は黒文字になる。