|
お世話になります。 画像60X60のピクセルが、何センチX何センチになるか、求めるためには、モニタのインチサイズが必要なようですが、モニタのインチサイズは、結局、手で測らないとだめなのでしょうか。 なにかしら、良い案がございましたらご教授ください。
|
No.1102 2021/01/21(Thu) 16:21:18
|
☆ Re: ピクセルをセンチ / stuncloud |
|
|
|
例えばこんな手段があるようです (リンク先はdelphiですがUWSCでもできるはず) http://mrxray.on.coocan.jp/Delphi/plSamples/020_DisplayResolution.htm#09
ただ、ここにも書いてあるように > ディスプレイのサイズを mm (ミリメートル) 単位まで取得するサンプルです. > 最初のコードは,画面のピクセル数と DPI (インチ当たりのピクセル数,PPI とも言う) から換算しています.結果として数ミリメートル以上の精度は望めないようです.モニタのサイズや種類によっては目安程度の値と考えた方が無難と思われます. > 正確な値は,おそらく,モニタを実測するしかないでしょう.
そこまで正確な値は出せないと思います ただし、出力するモニタが一つであれば、それに対応した調整を計算結果に対して施す、ということはできるかもしれません いかんせん環境依存ですのでこればかりは個々でやってみないとわからないですね…
ので、ひとまず自分の環境でちょっとやってみました
------------- def_dll CreateDCA(string, string, string, dword):dword:Gdi32.dll def_dll GetDeviceCaps(dword, int):int:Gdi32.dll
mon = 0 // メインモニタ
dc = CreateDCA("DISPLAY", "\\.\DISPLAY" + (mon + 1), NULL, 0) hsize = GetDeviceCaps(dc, 4) // HORZSIZE vsize = GetDeviceCaps(dc, 6) // VERTSIZE
msgbox("画面サイズ<#CR>横:" + hsize + "mm<#CR>縦:" + vsize + "mm")
// 60x60の画像なら w = 60 h = 60 mmw = w / monitor(mon, MON_WIDTH) * hsize mmh = h / monitor(mon, MON_HEIGHT) * vsize
msgbox("横"+w+"pixel:" + round(mmw, -2) + "mm<#CR>縦"+h+"pixel:" + round(mmh, -2) + "mm") -------------
先の記事をよく読むとGetDeviceCapsでHORZSIZEとVERTSIZEを取ると画面幅と高さがミリメートルで取れるようなのでそれを使いました Windows 10なのでそこそこ正確な値が出ているようです (実際にメジャーで測ってみましたが合ってるようでした) 画面の実寸がわかれば、画像のピクセルと画面全体のピクセルの比率から画像の実寸も得られるという寸法です ただし、リンク先にもあるようにOSによっては正しい値を返さない場合があることを留意しておいてください
|
No.1105 2021/01/22(Fri) 11:51:05
|
|