BMP画像をフォーム上に表示するプログラムを作っています。
90度回転して表示したいのですが、方法が判りません。
どうぞ御教示お願いします。
VS2003、VC++、MFC、SDI です。
::CreateDIBitmap でビットマップを作成し、StretchBlt で表示しています。
BMP画像のフォーマットを調べればできそうですが。
データ部は多分こんなふうに格納されていると思うので
[ 0][0]-------------------[100][ 0]
・
・
・
[0][100]-------------------[100][100]
これを
[0][100]-------------------[ 0][ 0]
・
・
・
[100][100]-------------------[100][0]
とデータ部を作り替えてから表示すればいいのでは?
既存関数を使わなくても入れ替えなどでできませんか?
てんてんさんの方法で可能ですが、フォーマットとか面倒なときは、
ビットマップを左上から点を取得していき、
(0,0) ----- (n,0)
:
(0,n) ----- (n,n)
フォーム上に回転させたように点を打っていく。
(0,n) ----- (0,0)
:
(n,n) ----- (n,0)
これが一番簡単ではないでしょうか。
ただし速度は遅いので、新しくビットマップを作りそこに回転させた画像を作っておき、それをフォームに描画したほうがいいでしょう。
確かに通りすがりさんの方法が簡単ですね。
RGBデータをBMPデータに変換する関数などがあればそれでもいいかも。
てんてん様、通りすがり様 素速い応答を有り難うございます。
通りすがり様の
> 新しくビットマップを作りそこに回転させた画像を作っておき...
これをやりたいのですが、具体的な方法が判りません。
既存関数がないと、自分では無理のように思います。
80%断念しそうです。
新しくビットマップを作るなら、CreateCompatibleDCやCreateCompatibleBitmapあたりかな。
# ちなみにぐーぐる先生で「ビットマップ 90度 回転」で検索すると
# ソース付きのサイトがありましたが、それは参考にしたのでしょうか?
# 一応回転っぽい処理を行える関数もあるみたいですね。
PlgBltで回転させて転送とか
ありましたね、PlgBlt関数。
入門の頃習ったのに忘れていました。
無事解決です。
皆様、ありがとうございました。
ツイート | ![]() |