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

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

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

ピクセル数の求め方を教えてください

[トピック内 9 記事 (1 - 9 表示)]  << 0 >>

■93113 / inTopicNo.1)  ピクセル数の求め方を教えてください
  
□投稿者/ 犬夜叉 (28回)-(2019/11/21(Thu) 14:49:51)

分類:[.NET 全般] 

エクセルの行の高さを5〜12で指定してから
エクセル画面をキャプチャーしてペイントソフトでピクセル数を取得した値です。
??はエクセルファイルを読み込んで、取得した行高さの値(Twips値??)です。
これをプログラムで表示しようと思ったのですが
Twips値からピクセル数に変換してエクセルの表示サイズを同じにしようとしたのですが
変換方法がわかりません。
どのような変換ほうほうなのか教えてください
(※ちなみにピクセルは罫線を含まない各行の高さです。)

エクセル	ピクセル Twips値??
5        5     102
6        7     120
7        8     139
8        9     162
9        11    180
10       12    199
11       13    222
12       15    240
未指定     17    -1(default 255)

引用返信 編集キー/
■93115 / inTopicNo.2)  Re[1]: ピクセル数の求め方を教えてください
□投稿者/ 魔界の仮面弁士 (2492回)-(2019/11/21(Thu) 15:15:20)
No93113 (犬夜叉 さん) に返信
> ??はエクセルファイルを読み込んで、取得した行高さの値(Twips値??)です。

Twip は「Twentieth of an Inch Point」から来ていて、
フォントサイズで言えば、1 ポイントが 20 Twipsにあたります。
1 インチは 72 ポイントなので、1 インチなら 1440 Twips ですね。


> Twips値からピクセル数に変換してエクセルの表示サイズを同じにしようとしたのですが

Windows の解像度設定が 100% の場合、96dpi (dot per inch) です。
この場合、1 ピクセル は 1440÷96 すなわち 15 Twips となります。

OS の画面設定が高解像度である場合には、この値が変化します。
125% 設定の環境では 120dpi なので、1 ピクセルは 1440÷120=12 Twips ですし、
150% 設定の環境では 144dpi なので、1 ピクセルは 1440÷144=10 Twips ですし、
200% 設定の環境では 192dpi なので、1 ピクセルは 1440÷192=7.5 Twips です。


解像度設定が分からない場合、それをプログラムで得て計算させることもできます。
Excel VBA で求める場合は、GetDeviceCaps API を使って算出できます。下記のサンプルが参考になるでしょう。
http://blogwizhook.blog.fc2.com/blog-entry-143.html

VB.NET の場合は、参照設定に Microsoft.VisualBasic.Compatibility を加えれば、
Microsoft.VisualBasic.Compatibility.VB6.Support.TwipsToPixelsY( twips高さ )
でピクセルに変換できます。
https://dobon.net/vb/dotnet/vb6/scaleheight.html
引用返信 編集キー/
■93116 / inTopicNo.3)  Re[2]: ピクセル数の求め方を教えてください
□投稿者/ 犬夜叉 (29回)-(2019/11/21(Thu) 16:05:22)
2019/11/21(Thu) 16:09:43 編集(投稿者)
エクセル ピクセル Twips値??
5      5     102  → 1ピクセル 20.4 Twips
6      7     120  → 1ピクセル 17.14 Twips
7      8     139  → 1ピクセル 17.35 Twips
8      9     162  → 1ピクセル 18 Twips
9      11    180  → 1ピクセル 16.36 Twips
10     12    199  → 1ピクセル 16.58 Twips
11     13    222  → 1ピクセル 17.07 Twips
12     15    240  → 1ピクセル 16 Twips

実際の値で1ピクセルの値が(16〜20.4)になり、
バラバラになっているのはどうしてでしょうか?

引用返信 編集キー/
■93117 / inTopicNo.4)  Re[3]: ピクセル数の求め方を教えてください
□投稿者/ 魔界の仮面弁士 (2493回)-(2019/11/21(Thu) 17:27:10)
No93116 (犬夜叉 さん) に返信
>>> エクセルの行の高さを5〜12で指定してから
>>> エクセル画面をキャプチャーしてペイントソフトでピクセル数を取得した値です。
> バラバラになっているのはどうしてでしょうか?

手元の Excel 環境で、8 つの行に対して、それぞれのセルの高さを
5 ピクセル〜12ピクセルまでドラッグで設定し、その画面キャプチャを
測定しましたが、特にズレは発生していませんでした。
(シートの縮尺率は、もちろん 100% にしています)


> エクセル ピクセル Twips値??

Twips値 と記した後ろに「??」が付与されているのが気になります。

とりあえず、右端の値を 20 で割って CInt すると、誤差が丸まって
左端の値に合致するようですが、この高さはどうやって取得したものでしょうか?


ピクセルを基準とする場合、 No93115 で述べたように画面の dpi 値が必要です。
たとえば画像高さやセルの高さを「インチ」単位で取得したら、そこに
実行環境の dpi 値(96 とか 144 とか)を乗じればピクセル数が求まります。


もしも Excel VBA の LoadPicture 関数を使って
 MsgBox LoadPicture("C:\temp\test.bmp").Height
などで画像高さを得るような場合、こちらは「HiMetric」単位系となります。
1 ミリメートル = 100 HiMetric ですので、ここで得られた値を
1000で割ればセンチメートル、100 で割ればミリメートルになりますし、
2540で割ればインチになります。


ワークシート上に画像を貼る場合、その画像は Shape オブジェクトとなり、
Height プロパティで高さを取得・設定できます。こちらは「ポイント」単位系です。
インチに揃える場合は、 No93115 で述べたように 72 で割れば OK ですし、
ピクセルに揃えるなら、 「Height 値 × dpi 値 ÷ 72」です。


Excel でワークシートの行の高さをドラッグ操作で変更する場合、
ドラッグ中には『高さ:ポイント数(ピクセル数)』表記のツールチップが表示されます。
この高さは、Excel VBA では Range オブジェクトの RowHeight プロパティで
取得・設定できます。こちらも「ポイント」単位系です。
引用返信 編集キー/
■93120 / inTopicNo.5)  Re[4]: ピクセル数の求め方を教えてください
□投稿者/ 魔界の仮面弁士 (2494回)-(2019/11/21(Thu) 18:26:59)
No93117 (魔界の仮面弁士) に追記
> 測定しましたが、特にズレは発生していませんでした。

参考までに、当方のキャプチャ結果を上げておきます。
http://www.vb-user.sakura.ne.jp/junk/replySamples/2019.11.21.18.17/excel.png

5 行目の高さを 5px とし、それ以降の行の高さを 1px ずつ増やしてありますが、
ペイントソフトで確認してもズレは確認できません。


単位変換の換算表も載せておきます。


《Pixel → Point 変換表》
      |   100%    125%    150%    200%    250%
Pixel |  96dpi  120dpi  144dpi  192dpi  240dpi
----- + ------  ------  ------  ------  ------
   5  |  3.750   3.000   2.500   1.875   1.500
   6  |  4.500   3.600   3.000   2.250   1.800
   7  |  5.250   4.200   3.500   2.625   2.100
   8  |  6.000   4.800   4.000   3.000   2.400
   9  |  6.750   5.400   4.500   3.375   2.700
  10  |  7.500   6.000   5.000   3.750   3.000
  11  |  8.250   6.600   5.500   4.125   3.300
  12  |  9.000   7.200   6.000   4.500   3.600
  13  |  9.750   7.800   6.500   4.875   3.900
  14  | 10.500   8.400   7.000   5.250   4.200
  15  | 11.250   9.000   7.500   5.625   4.500


《Pixel → Twip 変換表》
      |   100%    125%    150%    200%    250%
Pixel |  96dpi  120dpi  144dpi  192dpi  240dpi
----- + ------  ------  ------  ------  ------
   5  |    75      60      50      38      30 
   6  |    90      72      60      45      36 
   7  |   105      84      70      53      42 
   8  |   120      96      80      60      48 
   9  |   135     108      90      68      54 
  10  |   150     120     100      75      60 
  11  |   165     132     110      83      66 
  12  |   180     144     120      90      72 
  13  |   195     156     130      98      78 
  14  |   210     168     140     105      84 
  15  |   225     180     150     113      90 

引用返信 編集キー/
■93126 / inTopicNo.6)  Re[5]: ピクセル数の求め方を教えてください
□投稿者/ 犬夜叉 (30回)-(2019/11/22(Fri) 09:20:55)
No93120 (魔界の仮面弁士 さん) に返信

現在全画面に 1920X1200 で表示されている画面が 640X400 で表示されると
もともと 96dpi だとすれば 32dpi になるという考え方でいいんですよね
調べてみたのですが dpi はどうやって求めるのかわかりませんでした。
ネットでは解像度=画面サイズでしか表示されていないので、

計算では 24インチテレビだとすると

√(1920x1920+1200x1200)=対角線の長さ=24インチ

で計算するのでしょうか?
 ___________
√(1920x1920+1200x1200)
───────────── = 94dpi
     24

640×400 の場合は 31.446603773522013
ん?でも表示されるピクセル数は同じですよね
ただ単に大きく表示されるだけですね・・・

常に15で割ればいいということですか?






引用返信 編集キー/
■93127 / inTopicNo.7)  Re[6]: ピクセル数の求め方を教えてください
□投稿者/ kiku (144回)-(2019/11/22(Fri) 09:33:53)

参考になりそうな資料をはっておきます。
https://www.shoai.ne.jp/hirakata-s/it/windows/dpi_scale.html
引用返信 編集キー/
■93128 / inTopicNo.8)  Re[6]: ピクセル数の求め方を教えてください
□投稿者/ Hongliang (920回)-(2019/11/22(Fri) 09:39:18)
このスレッドで言われてるdpiは、ディスプレイの実際のサイズとか縦横ピクセル数とかは一切関係ありません。
Windowsのディスプレイ設定で、「テキストやその他の項目の大きさの変更」「テキスト、アプリ、その他の項目のサイズを変更する」などといった項目で提示されている何%の設定がdpi設定です。

// 高さの値を取得した方法が不明だからそれが本当にTwips値なのかどうかもわからない。
引用返信 編集キー/
■93130 / inTopicNo.9)  Re[6]: ピクセル数の求め方を教えてください
□投稿者/ shu (1208回)-(2019/11/22(Fri) 12:47:52)
No93126 (犬夜叉 さん) に返信
>
> 計算では 24インチテレビだとすると
>
> √(1920x1920+1200x1200)=対角線の長さ=24インチ
>
> で計算するのでしょうか?
>  ___________
> √(1920x1920+1200x1200)
> ───────────── = 94dpi
>      24
>
実際の長さに対する計算としてはよいと思います。


> 640×400 の場合は 31.446603773522013
> ん?でも表示されるピクセル数は同じですよね
> ただ単に大きく表示されるだけですね・・・
24インチ全体で640×400の表示あればその計算でよいです。
ピクセルの大きさが大きくなるので実際のDPIは小さくなります。


Windowsで出てくるDPIは画面表示100%で96DPIという固定で
考えましょうというものだったと思います。
なので逆に
√(1920x1920+1200x1200)
───────────── ≒ 23.5inch
     96
なのでこの解像度を96DPIで実際に表示するのに適した画面サイズは
23.5inchと考えればよいです。それ以外のサイズは実際のDPIと論理DPIが
一致しません。


引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ