1

私は、c# 3.5 GDI のデスクトップ アプリケーションで限定的なグラフィック エディターを使用しています。ユーザーは最初に、画像に合わせて画像のサイズ変更が行われるように、サイズが小さい画像ボックス コントロールに表示される画像を選択します。

トリミングの場合、ユーザーはトリミングする領域を選択します。画像をトリミングする方法を説明するネット上には多くの例がありますが、サムネイルで領域が選択されているが元の画像でトリミングが行われる場合、つまり2つの間で何らかのマッピングが行われる場合は説明されていません画像。

すべてのグラフィック エディタが同様の機能を提供します。これを行う方法を説明するリンクに私を案内できますか?

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 に答える