2015-11-09 136 views
0

是否有任何.net免費的winform或wpf庫可以提供控件來選擇圖像中的特定區域,然後我們可以將這些區域保存爲不同的圖像。如果我們可以使用鼠標在圖像上繪製網格,然後將該網格另存爲單獨的圖像,那將非常棒。從圖像中選擇特定區域

+0

可能出現[將PDF轉換爲圖像而不使用Ghostscript DLL]的副本(http://stackoverflow.com/questions/12831742/convert-pdf-to-image-without-using -ghostscript-dll) – Jens

+0

你看過[JCrop](http://jcrop.org/)嗎? – Obaid

+0

它的窗體/ wpf web還是什麼?必須指定。實際上真的需要明白你想要什麼 –

回答

0

這不是很難。在這裏的WinForms是一個小例子:

GraphicsPath GP = null; 
List<Point> points = new List<Point>(); 

private void pictureBox1_MouseDown(object sender, MouseEventArgs e) 
{ 
    points.Clear(); 
    points.Add(e.Location); 
} 

private void pictureBox1_MouseUp(object sender, MouseEventArgs e) 
{ 
    GP = new GraphicsPath(); 
    GP.AddClosedCurve(points.ToArray()); 
} 

private void pictureBox1_MouseMove(object sender, MouseEventArgs e) 
{ 
    if (e.Button == System.Windows.Forms.MouseButtons.Left) 
    { 
     points.Add(e.Location); 
     pictureBox1.Invalidate(); 
    } 
} 

private void pictureBox1_Paint(object sender, PaintEventArgs e) 
{ 
    if (points.Count > 1) 
     e.Graphics.DrawCurve(Pens.Orange, points.ToArray(), 0.5f); 
} 

private void cb_clearRegion_Click(object sender, EventArgs e) 
{ 
    points.Clear(); 
    pictureBox1.Region = null; 
} 

private void cb_SaveRegion_Click(object sender, EventArgs e) 
{ 
    Rectangle cr = pictureBox1.ClientRectangle; 
    using (Bitmap bmp = new Bitmap(cr.Width, cr.Height)) 
    using (Graphics G = Graphics.FromImage(bmp)) 
    { 
     G.SetClip(GP); 
     G.DrawImage(pictureBox1.Image, Point.Empty); 
     bmp.Save(@"D:\xyz.png", ImageFormat.Png); 
    } 
} 

注意,這不使用放大或縮小該區域內外到處創建位圖,所有具有相同的大小,原來,只是透明。

使用ScaleTransformPoint UnZoom(Point)函數來實現azoom是微不足道的;只是問你是否需要它..

如果你想添加'移動'模式,你可以使用MouseMove並重新計算所有的Points

如果你想要幾個區域,你將不得不收集List<T>並連續使用它們來創建輸出。

如果您確實只希望保存網格,而沒有圖像,請使用G.DrawPath(..)而不是DrawImage()

另外請注意,您可能想要使用各種繪圖工具,如直線,直線等來優化選擇。您可以逐漸添加數字到路徑中。