画像処理 その6
■ このスレッドは過去ログ倉庫に格納されています
0043デフォルトの名無しさん
2006/02/24(金) 14:23:00ウィンドウ(論理座標)とビューポート(物理座標)との間で
座標変換を行う処理を実装したのですが
Win32APIでサポートされているデバイスコンテキストを用いた
座標変換の処理結果と微妙に異なるのです。
設定値は int で保持、計算は int で行っていて
・ウィンドウ領域 - 始点 (WX1, WY1), 終点 (WX2, WY2)
・ビューポート領域 - 始点 (VX1, VY1), 終点 (VX2, VY2)
という設定で、ウィンドウ領域の点 P(PX, PY) を
ビューポート領域の点 Q(QX, QY) に変換するために
[式A] QX = (PX - WX1) * (VX2 - VX1) / (WX2 - WX1) + WX1
↓誤差を少なくするため
[式B] QX = ((PX - WX1) * (VX2 - VX1) + (WX2 - WX1) * WX1) / (WX2 - WX1)
※ API では hDc は初期済のデバイスコンテキストで
マッピングモード: SetMapMode(hDc, MM_ANISOTROPIC)
ウィンドウ設定: SetWindowExtEx(hDc, WX2 - WX1, WY2 - WY1, NULL)
ウィンドウ原点: SetWindowOrgEx(hDc, WX1, WY1, NULL)
ビューポート設定: SetViewportExtEx(hDc, VX2 - VX1, VY2 - VY1, NULL)
ビューポート原点: SetViewportOrgEx(hDc, VX1, VY1, NULL)
で各設定を行い LPtoDP() を用いて変換しています。
を使っています。
(続く...)
■ このスレッドは過去ログ倉庫に格納されています