2015-10-08 2 views
-1

Я хочу увеличить изображение вместе с графикой.Как увеличить изображение с графикой

Это увеличит только часть изображения, а не графическую часть.

public Image PictureBoxZoom(Image imgP, Size size) 
{ 
    Bitmap bm = new Bitmap(imgP, Convert.ToInt32(imgP.Width * size.Width), Convert.ToInt32(imgP.Height * size.Height)); 
    Graphics grap = Graphics.FromImage(bm); 
    grap.InterpolationMode = InterpolationMode.HighQualityBicubic; 
    return bm; 
} 

private void zoomSlider_Scroll(object sender, EventArgs e) 
{ 
    if (zoomSlider.Value > 0 && img != null) 
    { 
     pictureBox1.SizeMode = PictureBoxSizeMode.CenterImage; 
     pictureBox1.Image = null; 
     pictureBox1.Image = PictureBoxZoom(img, new Size(zoomSlider.Value, zoomSlider.Value)); 
    } 
} 

источник изображения:

img = Image.FromStream(openFileDialog1.OpenFile()); 

Изображения масштабирование, но когда мы рисуем прямоугольник вне изображение, то это не масштабирование вместе с изображением.

См изображения:

enter image description here

+0

https://msdn.microsoft.com/en-us/library/ms142040 % 28v = vs.110% 29.aspx –

+0

@HansPassant Я хочу получить текущее изображение для масштабирования с графикой. Я не хочу его сохранять. –

+0

http://www.codeproject.com/Articles/15743/Pan-and-Zoom-Very-Large- Эта ссылка может помочь u – Dandy

ответ

0

Вы можете сделать это (а) легко масштабировать e.Graphics объект в Paint случае .. Смотрите here for an example!

Так работать с вами код, который вы, вероятно, следует добавить это событие Paint:

private void pictureBox1_Paint(object sender, PaintEventArgs e) 
{ 
    Graphics g = e.Graphics; 

    g.ScaleTransform(zoom, zoom); 

    // now do your drawing.. 
    // here just a demo ellipse and a line.. 
    Rectangle rect = panel1.ClientRectangle; 
    g.DrawEllipse(Pens.Firebrick, rect); 
    using (Pen pen = new Pen(Color.DarkBlue, 4f)) g.DrawLine(pen, 22, 22, 88, 88); 
} 

Для расчета коэффициента масштабирования вам нужно сделать небольшой расчет.

Обычно вы не создавали бы увеличенное изображение, но оставляли это задание на PictureBox с помощью SizeMode=Zoom.

Тогда вы могли бы написать:

float zoom = 1f * pictureBox1.ClientSize.Width/pictureBox1.Image.Width; 

Чтобы центр изображение один обычно перемещает PictureBoxвнутриPanel. А чтобы прокрутки один устанавливает Группу Autocroll=true;

Но так как вы создаете увеличенное изображение, вы должны следить за текущим коэффициентом масштабирования некоторыми другими средствами.

Примечание:

Но, как вы используете PictureBoxSizeMode.CenterImage может быть, ваша проблема не с масштабирования в конце концов ?? Если ваша проблема действительно является местом размещения, а не размером рисованной графики, вам нужно сделать e.Graphics.TranslateTransform, чтобы переместить ее в нужное место.

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