JPEG等の画像の90度回転

[戻る]
Ti Amo 2008/12/28(日) 11:43:11
質問「JPEG画像の表示と印刷」では大変お世話になりました。

今度は、JPEG, GIF等の画像を90度回転させる方法について教えて戴きたいのです。

ネット上を探したら、一つ見つかりました。
http://homepage1.nifty.com/MADIA/vc/vc_bbs/200603/200603_06030044.html
これは、
1.CImageによる手法となっていますが、CImageだと透明GIFが透明にならなかったり
  するので、IPicture で出来ないものかと思っています。
2.回転した後ファイルに書き出すようになっていますが、自分の場合、
  回転したものを表示・印刷したいです。

CImage::GetBits みたいな関数は IPicture にはないようなので、どうしたらいいか
皆目見当がつきません。

どなたかご教授お願いいたします。

subaru 2009/01/08(木) 22:11:38
IPictureは基本的に読み込みと描画程度の機能しかなく画像編集には不向きです。
32BitのDIBにうまく変換できれば透過情報も扱えますが
そもそもIPictureから透過情報を残したまま32BitDIBに変換できるかどうかは知りません。

今回の場合は単純な回転描画のみなので、デバイスコンテキストに
SetWorldTransformで変換方法を適切に設定してやれば
一応回転した透過GIFの描画は可能です。

Ti Amo 2009/01/09(金) 09:21:41
[[解決]]
subaruさん、応答有り難うございます。

ここのサンプルの中にビットマップに変換するコードがありましたので、
これを使ってPlgBltで表示することにしました。
http://www.vcppclub.com/samples/graph/p_pict/pict.html
(get_Handle, CopyImage, Attach 使用)

透明GIFの透過情報が残っているかどうか判らないし、PlgBltのマスクの仕方も
判らないので、透明GIFはあきらめます。
CImageを使わないので、GDIPLUS.DLLの再頒布なんて厄介なことをしなくていいです。

教えて戴いたSetWorldTransformはよさそうですが、自分には難解なので、
将来の課題にします。
ありがとうございました。

bun 2009/01/09(金) 11:09:07
> CImageを使わないので、GDIPLUS.DLLの再頒布なんて厄介なことをしなくていいです。

参考までにですが、WindowsXP以降に限定するならGDIPLUS.DLLの再頒布は不要です。

Ti Amo 2009/01/09(金) 17:41:43
bunさん、有り難うございます。
98SEでテストしたとき要求メッセージが出たもんですから。
98のユーザーさんもまだいらっしゃる感じなので、OSの対象としています。

ISLe 2009/01/14(水) 23:40:12
> 98のユーザーさんもまだいらっしゃる感じなので、OSの対象としています。

MSDNでPlgBltのページを見ると

> Windows NT/2000/XP/Vista: Included in Windows NT 3.1 and later.
> Windows 95/98/Me: Unsupported.

って書いてありますけど。

古いスレッドには追加発言できません。