我正在开发一个应用程序来处理在宽幅图像扫描仪上扫描的图像。这些图像显示为 aImageBrush
上的 a 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);
}