2010-01-04 54 views
1

我在c#3.5 GDI桌面應用程序中做了一些有限的圖形編輯器。用戶首先選擇在圖像框控件中顯示的較小圖像,以便進行圖像調整大小以適應圖像。用C編輯圖像#

對於裁剪,用戶選擇要裁剪的區域。網上有許多例子說明了如何裁剪圖像,但是他們都沒有解釋在縮略圖上選擇區域時的情況,但裁剪是在原始圖像上完成的,即在兩者之間完成某種映射圖片。

所有的圖形編輯器都提供了類似的功能。你能指導我解釋如何做到這一點的鏈接?

回答

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)); 
+0

是的,你知道一些文章或代碼段嗎? btw實際上是否需要?我在網上找到的代碼都沒有談到這件事。 – Haris 2010-01-06 14:16:26

+0

爲此添加了我的實現。免責聲明:這只是我在5分鐘內打了一個耳光,它不是全面防護,優化或其他任何東西。 – 2010-01-06 15:23:19

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; 
} 

傳中的形象和區域要裁剪和應該這樣做