プロが教える店舗&オフィスのセキュリティ対策術

300dpiでスキャンした画像をVB6.0のPictureBoxへScaleModeをTwipで読み込みます。
この画像をサイズをmm単位で計測したいのですが、現在
H_Size = ScaleHeight * (100 / 300) / 56.7
という式にしていますが、誤差が出ます。
どこか間違えているところがありますか?

A 回答 (1件)

求めたいサイズは元文書のサイズですよね?



H_Size = ScaleHeight / Screen.TwipsPerPixelY / 300 * 25.4

W_Size = ScaleWidth / Screen.TwipsPerPixelX / 300 * 25.4

で求められると思います。

ちなみに、Screen.TwipsPerPixelY と Screen.TwipsPerPixelX は通常同じ値です。

# 100という数字はどこから出てきたのでしょう?

この回答への補足

frogeyeさん、早速の回答ありがとうございます。
もう少し具体的にお話しをさせていただきます。

図を300dpiでスキャンします。
PictureBox1で読み込みます。
それでは画像が大きすぎるので、
ScaleHeight * 0.15 * 0.5 | ScaleWidth * 0.15 * 0.5
したものを、PictureBox2にコピーします。
PictureBox2には縮小された画像が表示されています。
そこに、開始位置と終了位置を決めて、Y軸X軸の実寸を表示させたいと考えています。
そのために現在は
Y_S = Y1 / 0.5 / 0.15 * (100/300) / 56.7
Y_E = Y2 / 0.5 / 0.15 * (100/300) / 56.7
Y_Size = Y_E - Y_S

としております。
おおよそのサイズは取得できるのですが、5cmに対して2mmの誤差があり、実寸が10cmの図を10.4cmと判断してしまうようです。

因みに大分以前に作っていたので、何故100なのかが思い出せません。

わかりにくい話しで申し訳ありませんが、智恵を貸してください。

補足日時:2006/09/13 15:24
    • good
    • 0
この回答へのお礼

解決しました。
Y_S = Y1 / 0.5 / 0.15
で、300dpiで読み込んだときのサイズに戻します。
15twip=1ピクセルなので、
Y_S = Y_S / 15
インチはInch = ピクセル / 解像度 なので
Y_S = Y_S / 300
1インチ = 25.4mm なので
Y_S = Y_S * 25.4

Y_S = Y1 / 0.5 / 0.15 / 15 / 300 * 25.4
Y_E = Y1 / 0.5 / 0.15 / 15 / 300 * 25.4
Y_Size = Y_E - Y_S

で、誤差なく計算することが出来ました。
ありがとうございました。

お礼日時:2006/09/13 16:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!