いつもお世話になっています。
メタファイルを作成し、LineToExなどを使用して線や円を描画しているのですが、
普通にマッピングモードを利用して描画すると0.01mm単位までしか小数点以下を
考慮できません。
現状手元に小数点以下5桁までの描画位置のデータがあるのですが、メタファイル
に書き込む際に小数点以下5桁まで有効にして書き込む方法はあるのでしょうか?
アドバイスをお願いします。
例
(10.25682, 10.25600)-(10.25700, 10.25600)の直線を描画したい
これを0.01mmで3桁目を四捨五入したとして計算上
(10.26000, 10.25600)-(10.26000, 10.25600)の点になってします。
メタファイルはCreateEnhMetaFileで作成しています。
よろしくお願いいたします。
座標を1000倍して記録するのはだめでしょうか。
dairygoods さま、返信ありがとうございます。
せっかく返信いただいたのですが、知識がなくわかりません。
1000倍して記録する事ができるのでしょうか?
メタファイルをCreateEnhMetaFileで作成するときに、
0.01mm単位で幅と高さを指定しています。
普通に1000倍して描画すると作成したメタファイルより外のところに
線などを書いてしまうのですが。
メタファイルの作成方法が悪いのでしょうか?
メタファイルをそのまま適応して描画させようとするのであれば、
無理だと思います。仮にそういうファイルを無理やり作成したとしても
解釈する側で解釈できなければ意味がありませんし。
メタファイルをロードして自分で解釈して描画するというのであれば、
可能かもしれませんけれど。
マッピングモードに無いような単位でメタファイルを作成するのは
多分無理では無いでしょうか?
メタファイルの使用方法まで提示してもらわないと多分適切なレスポンスは
期待できないと思います。
試してないけど
SetMapMode
SetWindowExtEx
SetViewportExtEx
この辺は使えないのかな?
確かにSetWindowExtExとSetViewportExtExの組み合わせをうまくやれば、
1000倍した値を見た目上、縮小して表示することは可能かもしれません。
まあ、この辺はご本人に試していただいて良いのでは無いですかねぇ。
PATIO さま、通りすがりさま、返信ありがとうございます。
やりたい事は
手元にある、図形の座標位置のみ書かれたデータをベクタ画像に変換する。
変換したベクタ画像(メタファイル)はワードなどに貼り付ける。
です。
ここで、データの座標位置が小数点以下まで指定されているため
望むような図形が描けませんでした。
(本来正方形なのに台形になったり)
SetWindowExtExとSetViewportExtExですね。
使って試してみます。
アドバイスありがとうございます。
SetWindowExtExとSetViewportExtExを使うと見た目のサイズを
変える事ができるので1000倍した値を使っていても
表示上は元の状態と同じように見えるという話なので
メタファイルに記録された内容をWordに貼り付けた時に
意図したサイズで表示する事は出来ないような気がします。
メタファイルってSetWindowExtExとSetViewportExtExで設定した
内容も内部に記録しているのですかねぇ。
私が書いているメタファイルの使用方法と言うのは正に
Wordなどに貼り付けると言う部分の話で、
メタファイルを再生する側がその辺を調整して表示できなければ、
記録側でいくら調整しても意味が無いという話です。
実際には実験して確かめれば多分わかると思いますけれど。
貼り付けた状態でサイズを縮小すれば、うまく行くかもしれませんけれど、
その辺は手動に頼る事になるのではと思うのでそれで良いのかどうかは
そうさんの判断次第と言う事になりますね。
> ここで、データの座標位置が小数点以下まで指定されているため
> 望むような図形が描けませんでした。
> (本来正方形なのに台形になったり)
ふと疑問に思ったのですが、正しく表示されないのは本当に精度が足りない
せいでしょうか?
0.01mm単位までしか表せないからWord上でずれるっていう解釈は
少し無理があるような気がします。
よっぽど小さい図形データをすごく拡大して貼り付けているとか?
無理があるような気がしているだけなので、的外れなら無視してください。