BMP画像を90度回転して表示するには?

解決


ほんちゃん  2006-07-22 10:04:51  No: 62554  IP: 192.*.*.*

BMP画像をフォーム上に表示するプログラムを作っています。
90度回転して表示したいのですが、方法が判りません。
どうぞ御教示お願いします。
VS2003、VC++、MFC、SDI です。
::CreateDIBitmap でビットマップを作成し、StretchBlt で表示しています。

編集 削除
てんてん  2006-07-22 10:54:54  No: 62555  IP: 192.*.*.*

BMP画像のフォーマットを調べればできそうですが。
データ部は多分こんなふうに格納されていると思うので

[  0][0]-------------------[100][  0]
  ・
  ・
  ・
[0][100]-------------------[100][100]

これを
[0][100]-------------------[  0][  0]
  ・
  ・
  ・
[100][100]-------------------[100][0]
とデータ部を作り替えてから表示すればいいのでは?

既存関数を使わなくても入れ替えなどでできませんか?

編集 削除
通りすがり  2006-07-22 11:16:46  No: 62556  IP: 192.*.*.*

てんてんさんの方法で可能ですが、フォーマットとか面倒なときは、
ビットマップを左上から点を取得していき、
(0,0) ----- (n,0)
  :
(0,n) ----- (n,n)
フォーム上に回転させたように点を打っていく。
(0,n) ----- (0,0)
  :
(n,n) ----- (n,0)
これが一番簡単ではないでしょうか。

ただし速度は遅いので、新しくビットマップを作りそこに回転させた画像を作っておき、それをフォームに描画したほうがいいでしょう。

編集 削除
てんてん  2006-07-22 11:43:09  No: 62557  IP: 192.*.*.*

確かに通りすがりさんの方法が簡単ですね。
RGBデータをBMPデータに変換する関数などがあればそれでもいいかも。

編集 削除
ほんちゃん  2006-07-22 14:35:40  No: 62558  IP: 192.*.*.*

てんてん様、通りすがり様  素速い応答を有り難うございます。
通りすがり様の
> 新しくビットマップを作りそこに回転させた画像を作っておき...
これをやりたいのですが、具体的な方法が判りません。
既存関数がないと、自分では無理のように思います。
80%断念しそうです。

編集 削除
通りすがり  2006-07-22 18:44:18  No: 62559  IP: 192.*.*.*

新しくビットマップを作るなら、CreateCompatibleDCやCreateCompatibleBitmapあたりかな。

# ちなみにぐーぐる先生で「ビットマップ  90度  回転」で検索すると
# ソース付きのサイトがありましたが、それは参考にしたのでしょうか?
# 一応回転っぽい処理を行える関数もあるみたいですね。

編集 削除
旧通りすがり(別の↑通りすがりさんが来た  2006-07-23 06:06:29  No: 62560  IP: 192.*.*.*

PlgBltで回転させて転送とか

編集 削除
ほんちゃん  2006-07-23 08:15:53  No: 62561  IP: 192.*.*.*

ありましたね、PlgBlt関数。
入門の頃習ったのに忘れていました。
無事解決です。
皆様、ありがとうございました。

編集 削除