1

ワイド イメージ スキャナーでスキャンした画像を操作するアプリケーションを開発しています。これらのイメージは、 の として表示されImageBrushますCanvas。これCanvasをマウスで作成Rectangleして、トリミングする領域を定義できます。

ここでの私の問題はRectangle、元の画像の正確な領域を切り取るように、元の画像サイズに合わせてサイズを変更することです。

私はこれまで多くのことを試してきましたが、正しい解決策を見つけるために頭を圧迫しているだけです.
元の画像がキャンバスに表示されている画像よりも大きい割合を取得する必要があることはわかっています。

元の画像の寸法は次のとおりです。

時: 5606 時
: 7677

画像を表示すると、次のようになります。

時: 1058,04 幅
: 1910

これらの数値を与える:

float percentWidth = ((originalWidth - resizedWidth) / originalWidth) * 100;
float percentHeight = ((originalHeight - resizedHeight) / originalHeight) * 100;

percentWidth = 75,12049
percentHeight = 81,12665

Rectangleここから、元の画像に合わせてサイズを正しく変更する方法がわかりません。

私の最後のアプローチはこれでした:

int newRectWidth = (int)((originalWidth * percentWidth) / 100);
int newRectHeight = (int)((originalHeight * percentHeight) / 100);
int newRectX = (int)(rectX + ((rectX * percentWidth) / 100));
int newRectY = (int)(rectY + ((rectY * percentHeight) / 100));

私はここで軌道に乗っておらず、何が欠けているのかがわからないので、誰かが私を正しい方向に導いてくれることを願っています。

解決

    private System.Drawing.Rectangle FitRectangleToOriginal(
        float resizedWidth,
        float resizedHeight,
        float originalWidth,
        float originalHeight,
        float rectWidth,
        float rectHeight,
        double rectX,
        double rectY)
    {
        // Calculate the ratio between original and resized image
        float ratioWidth = originalWidth / resizedWidth;
        float ratioHeight = originalHeight / resizedHeight;

        // create a new rectagle, by resizing the old values
        // by the ratio calculated above
        int newRectWidth = (int)(rectWidth * ratioWidth);
        int newRectHeight = (int)(rectHeight * ratioHeight);
        int newRectX = (int)(rectX * ratioWidth);
        int newRectY = (int)(rectY * ratioHeight);

        return new System.Drawing.Rectangle(newRectX, newRectY, newRectWidth, newRectHeight);
    }
4

2 に答える 2