2015-11-09 2 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); 
    } 
} 

Обратите внимание, что это не использовать масштабирование или вне и создает растровое изображение, все имеют тот же размер, что и оригинал, только прозрачное везде за пределами региона.

Реализация azoom тривиально, используя ScaleTransform и функцию Point UnZoom(Point); просто спросите, если вам это нужно.

Для того, чтобы добавить режим 'move', вы можете использовать MouseMove и перечислить все Points.

Если вам нужны несколько регионов, вам нужно будет собрать List<T> и использовать их последовательно для создания вывода.

Если вы действительно хотите сохранить только сетку, без изображения, используйте G.DrawPath(..) вместо DrawImage()!

Также обратите внимание, что вы можете использовать различные инструменты для рисования, такие как линии, rectanlges и т. Д., Чтобы уточнить выбор. Вы можете постепенно добавлять цифры к пути.

Смежные вопросы