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

解決


ほんちゃん  2006-07-22 19:04:51  No: 62554

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


てんてん  2006-07-22 19:54:54  No: 62555

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

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

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

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


通りすがり  2006-07-22 20:16:46  No: 62556

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

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


てんてん  2006-07-22 20:43:09  No: 62557

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


ほんちゃん  2006-07-22 23:35:40  No: 62558

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


通りすがり  2006-07-23 03:44:18  No: 62559

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

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


旧通りすがり(別の↑通りすがりさんが来た  2006-07-23 15:06:29  No: 62560

PlgBltで回転させて転送とか


ほんちゃん  2006-07-23 17:15:53  No: 62561

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加