我使用的是此版本的修改版本:https://github.com/dmitryshelamov/UI-Cropping-Image
到目前为止,我已经添加了放大图像的功能。您选择了放大版本周围的区域,然后当它抓住裁剪的位置时,它会放大图像,而我只是传递了我们的缩放比例,因此它知道可以相应地调整其裁剪位置。
我在该github上的CroppingAdorner.cs文件中修改了一个部分,用于GetCroppedBitmapFrame。我传入缩放级别(一个整数,正值为每个值+ 10%缩放)。因此,例如,如果将缩放级别设为4,则我们放大到140%。
其裁剪的图像将恢复为正常大小,但裁剪边界不会恢复。因此,我只将它们乘以一个比率,即该比率为1 /(1 +缩放/ 10),所以缩放级别4就是1 / 1.4。
到目前为止,所有这些都可以完美运行(因此,这是与获取裁剪区域相关的代码)
double ratio = 1 / (1 + (zoom / 10d));
var crop = new CroppedBitmap(elementBitmap,
new Int32Rect((int)(_rectangleManager.TopLeft.X * ratio), (int)(_rectangleManager.TopLeft.Y * ratio),
(int)(_rectangleManager.RectangleWidth * ratio), (int)(_rectangleManager.RectangleHeight * ratio)));
所以...我现在想做的是平移图像。我正在偏移图像,当前一次只能左右偏移100像素。如果我偏移图像但不缩放,则无需更改代码即可获取图像的正确区域。如果我缩放但没有偏移,那就一样。
但是,当一起缩放和偏移时,我裁剪到的区域不正确。我不知道该怎么做。我得到的最接近的是:
double ratio = 1 / (1 + (zoom / 10d));
var crop = new CroppedBitmap(elementBitmap,
new Int32Rect((int)(_rectangleManager.TopLeft.X * ratio + leftMargin * (1 - ratio)), (int)(_rectangleManager.TopLeft.Y * ratio),
(int)(_rectangleManager.RectangleWidth * ratio), (int)(_rectangleManager.RectangleHeight * ratio)));
然而,在许多情况下,这似乎都能得到正确的结果,但在缩放/平移过大的其他情况下会崩溃 leftMargin是图像的偏移量。因此向左平移6次将是-600。
我真的无法理解我要使用此偏移量进行的处理,以使其裁剪到正确的区域。