読者です 読者をやめる 読者になる 読者になる

Gobble up pudding

プログラミングの記事がメインのブログです。

MENU

Direct2DとWindows Imaging Component(WIC)で透過PNGを表示

スポンサードリンク

Direct2Dを使ってPNG画像を表示するいい方法はないか模索していたところ、
Windows Imaging Component(WIC)というのを見つけましたが、しばらくこれどうやって使うの?
状態が続いており、いろんなサイトを読んでみるも挫折……
と思ったところ神!!!といえるようなサイトを発見し、そこの解説を読んで、
一応一つのコードにまとめました。長いんでGistに貼り付けました。
作り方はWin32プロジェクト作って変更していくスタイルです。
ひな形をVisual Studioに作らせてADDとかMODとかDELとか書いているところを変更しただけです。
Windows APIの最低限の知識がないと意味不明です。
あとちょっとだけでもCOM知ってないとなんじゃこりゃですw

作成環境

Windows 8.1
Visual Studio 2013 Professional
※ExpressだとATLが使えないので、CComPtrが使えないですので、代替の_com_ptr_tを使えばいいそうです。
※_com_ptr_tは古いのでMicrosoft::WRL::ComPtrのほうが良いです。

作成方法

ファイル > 新規作成 > プロジェクト
Visual C++のWin32 プロジェクトを選択し
プロジェクト名をD2DTest01とかにしておく。
デフォルト設定のままプロジェクトを作成。
プロジェクトを右クリックしてプロパティで
Debug/Releaseともに
構成プロパティのリンカー > 入力 > 追加の依存ファイル
先頭に以下を追加して下さい
d2d1.lib;WindowsCodecs.lib;
あとはD2DTest01.cppのWinMainがあるソースを下記のように変更する。

ソース

2014/11/14追記
COM用のスマートポインタにCComPtrとCComQIPtrとを不適切に使っていた箇所がありました。
今回の場合はCComPtrだけで用が足りますので修正しておきました。
なお、CComPtrとCComQIPtrの違いはこのあたりが参考になるかと……
方法: CComPtr および CComQIPtr インスタンスを作成して使用する
visual c++ - What is the use of CComPtr over CComQIPtr in COM? - Stack Overflow

実行結果

f:id:fa11enprince:20140310095536p:plain
それにしても初見殺しなコード……WICちゃんと理解しないと…いろいろオプションとか機能ありすぎてわけわかりません(;´・ω・)

参考にさせていただいたサイト 感謝!

http://www.tkzdev.net/

使わせていただいた画像

※リンク先が切れていましたので、トップページのURLを載せています。