• ベストアンサー

VB6でピクチャーのサイズの出し方

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

質問者が選んだベストアンサー

  • ベストアンサー
  • frogeye
  • ベストアンサー率47% (11/23)
回答No.1

求めたいサイズは元文書のサイズですよね? H_Size = ScaleHeight / Screen.TwipsPerPixelY / 300 * 25.4 W_Size = ScaleWidth / Screen.TwipsPerPixelX / 300 * 25.4 で求められると思います。 ちなみに、Screen.TwipsPerPixelY と Screen.TwipsPerPixelX は通常同じ値です。 # 100という数字はどこから出てきたのでしょう?

o_teu
質問者

お礼

解決しました。 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 で、誤差なく計算することが出来ました。 ありがとうございました。

o_teu
質問者

補足

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なのかが思い出せません。 わかりにくい話しで申し訳ありませんが、智恵を貸してください。

関連するQ&A