在C#中裁剪图像

时间:2010-01-04 13:51:17

标签: c# gdi crop

我在c#3.5 GDI的桌面应用程序中做了一些有限的图形编辑器。用户首先选择在尺寸较小的图片框控件中显示的图像,从而完成图像尺寸调整以适合图片。

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

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

2 个答案:

答案 0 :(得分: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));

答案 1 :(得分: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;
}

传入一个图像和你要裁剪的区域,并且应该这样做