0
是否有任何.net免費的winform或wpf庫可以提供控件來選擇圖像中的特定區域,然後我們可以將這些區域保存爲不同的圖像。如果我們可以使用鼠標在圖像上繪製網格,然後將該網格另存爲單獨的圖像,那將非常棒。從圖像中選擇特定區域
是否有任何.net免費的winform或wpf庫可以提供控件來選擇圖像中的特定區域,然後我們可以將這些區域保存爲不同的圖像。如果我們可以使用鼠標在圖像上繪製網格,然後將該網格另存爲單獨的圖像,那將非常棒。從圖像中選擇特定區域
這不是很難。在這裏的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);
}
}
注意,這不使用放大或縮小該區域內外到處創建位圖,所有具有相同的大小,原來,只是透明。
使用ScaleTransform
和Point UnZoom(Point)
函數來實現azoom是微不足道的;只是問你是否需要它..
如果你想添加'移動'模式,你可以使用MouseMove
並重新計算所有的Points
。
如果你想要幾個區域,你將不得不收集List<T>
並連續使用它們來創建輸出。
如果您確實只希望保存網格,而沒有圖像,請使用G.DrawPath(..)
而不是DrawImage()
!
另外請注意,您可能想要使用各種繪圖工具,如直線,直線等來優化選擇。您可以逐漸添加數字到路徑中。
可能出現[將PDF轉換爲圖像而不使用Ghostscript DLL]的副本(http://stackoverflow.com/questions/12831742/convert-pdf-to-image-without-using -ghostscript-dll) – Jens
你看過[JCrop](http://jcrop.org/)嗎? – Obaid
它的窗體/ wpf web還是什麼?必須指定。實際上真的需要明白你想要什麼 –