C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 31 を表示中)
■15167 / )  Re[6]: C#-画像の回転処理について
□投稿者/ ざーぼん (5回)-(2008/03/06(Thu) 00:31:12)
>Jitta on the way さん
>>>長さが一致しないとは、どれくらいのズレがあるのでしょうか。
>>だいたい1cm〜1.5cm程度のズレがありました。
>>※ディスプレイの解像度で大分変わるみたいですが…
>>
>
> んと、上の Bitmap は、ピクセル数で用意していると思います。で、ここは cm ?
> プログラム内で使っている単位が統一されていますか?
>
> No1507 のコードだと、img には回転後のイメージがはいっているのですよね?これのサイズがすでにズレているということ?

プログラム内での処理単位はピクセルで統一されています。

ごめんなさい、若干誤解があるようです。
プログラム上での長さ(ピクセル)には特に問題ありません。
幅:高さが800×600(ピクセル)の画像をRotateFlipメソッドで回転させれば、プログラム上での幅・高さは600×800(ピクセル)になります。
「長さが一致しない」というのは、実際に画面上に表示した際の「見た目」の話になります。
例えば800×600の画像を画面に表示した際「見た目の幅」が20cmだとして、その画像を90度回転させます。
この時に、回転後の画像(600×800)の「高さ」と回転前の画像の「幅」は同じ800ピクセルなのですが、
回転後の画像の「見た目の高さ」は21cmと異なってしまうので、これをなんとか調節できないものかというのが本題になります。

説明が下手糞で申し訳ありません。
そもそも「見た目の」という曖昧な表現がよく無かったですね…

組込系汐涙餅杆湫マ さん(組込系プログラマさん?)がおっしゃる様に
>解像度によって、1ドットが正方形じゃ無くなることもある
というのが原因なのかな、と思います。

自分なりに色々と調べてみて、画面の物理的な大きさと、解像度から1mm辺りのピクセル数を算出すれば・・・と思ったのですが
「画面の物理的な大きさ」がまず取得できませんでした。
APIのGetDeviceCapsを使って
GetDeviceCaps(デスクトップのウィンドウハンドル, HORZSIZE)
GetDeviceCaps(デスクトップのウィンドウハンドル, VERTSIZE)
で画面の物理サイズをミリメートル単位で取得できる、らしいのですが、
なぜか画面の解像度を変えるとGetDeviceCapsで取得できる値も変化してしまいます。

ちなみにこの辺りの処理は下記サイトを参考にしました。
http://www5d.biglobe.ne.jp/~tomoya03/shtml/vbapi/GetDevIn.htm
http://homepage1.nifty.com/kurichan/html/tips32.htm


長くなったので1回投稿します。


返信 編集キー/


管理者用

- Child Tree -