3

画面上でマウスがクリックされた 2 つの場所の間の距離を計算する必要があります。

target(x & Y) & source(X & Y) は、マウス移動イベント (eX & eY) で入力されます

私は持っているdistance = Math.Sqrt(Math.Pow(targetX - sourceX, 2) + Math.Pow(targetY - sourceY, 2));

これにより結果が得られますが、正直なところ、測定値の単位や変換方法がわかりません。その結果をcmやインチなどの意味のある結果に変換するにはどうすればよいですか? 画面の解像度を考慮する必要があると思いますか?

更新 私は本当に時間をつぶしているだけです。優れたソリューションを探しているのではなく、機能するものだけを探しています。1日か2日しか続きません。

これがMoveMoveイベントと行われた呼び出しです。明確にするために、すべてを前に投稿する必要がありました。

    private void HookManager_MouseMove(object sender, MouseEventArgs e)
    {

        labelMousePosition.Text = string.Format("x={0:0000}; y={1:0000}", e.X, e.Y);
        AddDistance(Convert.ToDouble(e.X), Convert.ToDouble(e.Y));
    }

    private void AddDistance(double targetX, double targetY)
    {
        if (sourceX != 0 && sourceY != 0)
        {
            double distance = Convert.ToDouble(lblDistanceTravelled.Text);
            distance =+ Math.Sqrt(Math.Pow(targetX - sourceX, 2) + Math.Pow(targetY - sourceY, 2));
            lblDistanceTravelled.Text = distance.ToString();
        }
        sourceX = targetX;
        sourceY = targetY;
    }
4

3 に答える 3

5

変数 targetX と sourceX はピクセル単位である可能性が最も高いため、結果の距離はピクセル単位になります。

それを「画面上のインチ」に変換するには、画面のサイズを知る必要があります。1 インチあたりのピクセル数を決定し、そこから変換することができます (ただし、これは、実際に定規を画面に当てた場合に得られる推定値にすぎません)。1 インチあたりのピクセル数を取得するには、次を参照してください。

.NET でモニターの実際のピクセル サイズを確認するにはどうすればよいですか?

その質問から、次のように DPI を取得できます (ただし、多くの警告について受け入れられた回答を読んでください)。

PointF dpi = PointF.Empty;
using(Graphics g = this.CreateGraphics()){
    dpi.X = g.DpiX;
    dpi.Y = g.DpiY;
}

単位間の変換は次のように機能します。

lengthInInches = numberOfPixes / dotsPerInch

ここで「ドット」と「ピクセル」は同じ意味です。私は一般的な用語を使用しています。

于 2012-12-18T16:18:07.470 に答える
3

「現在のDPI」を取得できます

int currentDPI = 0;  
using (Graphics g = this.CreateGraphics())  
{  
    currentDPI = (int)g.DpiX;      
}

そして、あなたは得ることができます

double distanceInInches = distance/*InPixels*/ / currentDPI;

ただし、システムの DPI 設定は、ピクセル距離から画面上のインチ距離への実際の変換を行うために実際に依存することはできません。

于 2012-12-18T16:20:43.787 に答える
1
        double dpc = this.CreateGraphics().DpiX / 2.54; //Dots Per Centimeter

        //calculate the number of pixels in the line
        double lineLengthInPixels = Math.Sqrt(Math.Pow(x2 - x1, 2) + Math.Pow(y2 - y1, 2));

        //line length in centimenters
        double lineLengthInCentimeters = dpc / lineLengthInPixels;
于 2012-12-18T16:19:18.480 に答える