1

我在 c# 3.5 GDI 的桌面应用程序中做某种有限的图形编辑器。用户首先选择一个显示在图片框控件中的图像,该控件的尺寸较小,因此调整图像大小以适合图片。

对于裁剪,用户选择要裁剪的区域。网上有很多例子解释了如何裁剪图像,但没有一个解释了在缩略图上选择区域但裁剪是在原始图像上完成的情况,即在两者之间完成某种映射图片。

所有图形编辑器都提供类似的功能。你能引导我到一个解释如何做到这一点的链接吗?

4

2 回答 2

4

在我看来,您需要根据图片和缩略图的相对大小自己计算原始图像上的裁剪矩形。

public static class CoordinateTransformationHelper
{
    public static Point ThumbToOriginal(this Point point, Size thumb, Size source)
    {
        Point rc = new Point();
        rc.X = (int)((double)point.X / thumb.Width * source.Width);
        rc.Y = (int)((double)point.Y / thumb.Height * source.Height);
        return rc;
    }

    public static Size ThumbToOriginal(this Size size, Size thumb, Size source)
    {
        Point pt = new Point(size);
        Size rc = new Size(pt.ThumbToOriginal(thumb, source));
        return rc;
    }

    public static Rectangle ThumbToOriginal(this Rectangle rect, Size thumb, Size source)
    {
        Rectangle rc = new Rectangle();
        rc.Location = rect.Location.ThumbToOriginal(thumb, source);
        rc.Size = rect.Size.ThumbToOriginal(thumb, source);
        return rc;
    }
}

使用示例:

Size thumb = new Size(10, 10);
Size source = new Size(100, 100);
Console.WriteLine(new Point(4, 4).ThumbToOriginal(thumb, source));
Console.WriteLine(new Rectangle(4, 4, 5, 5).ThumbToOriginal(thumb, source));
于 2010-01-04T13:55:57.560 回答
3

这是裁剪 System.Drawing.Image 的一种非常简单的方法

public static Image CropImage(Image image, Rectangle area)
{
    Image cropped = null;

    using (Bitmap i = new Bitmap(image))
    using (Bitmap c = i.Clone(area, i.PixelFormat))
        cropped = (Image)c;

    return cropped;
}

传入图像和要裁剪的区域,应该这样做

于 2010-01-04T20:12:37.597 回答