2016-01-28 2 views
0

Я хочу использовать дорожку для изменения размера изображения, которое рисуется в событии .._Paint.Изменение размера изображения в центре

До сих пор я загрузил изображение из файла в растровое изображение под названием original. Теперь у меня есть другой битмап, называемый «обрезанный», который хранит часть исходного изображения.

Bitmap original = new Bitmap(spriteSheet); 
RectangleF srcRect = new RectangleF(ip.x, ip.y, ip.width, ip.height); 
Bitmap cropped = original.Clone(srcRect, original.PixelFormat); 

У меня есть PictureBox под названием pb_preview который рисует обрезанное изображение так:

e.Graphics.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.Half; 
e.Graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor; 
RectangleF rc = new RectangleF(pb_preview.Height/2, pb_preview.Width/2, zoomSlider.Value * cropped.Width, zoomSlider.Value * cropped.Height); 
e.Graphics.DrawImage(cropped, rc); 

В моем trackbars события изменения значения, я аннулированию pb_preview так каждый раз, когда я изменить значение, то pb_preview будет рисовать изображение при большем значении.

Проблема в том, что каждый раз, когда я изменяю значение трекбара, изображение не изменяется в центре по центру, вместо этого оно изменяется, но каждый раз, когда оно изменяется, оно немного идет влево, пока изображение с максимальным размером не будет разорвано.

+0

вы можете разместить код где вы аннулируете «PictureBox»? –

+0

@ VishnuPrasad Я объявляю недействительным событие Trackbar Scroll и сразу после создания обрезанного растрового изображения под ним. – Zer0

+0

Вы создаете обрезанное растровое изображение каждый раз? если это так, изменилось ли значение члена элемента 'ip' в это время? , Похоже, что размер вашего обрезанного изображения непропорционально масштабируется с размером окна «pb_preview». –

ответ

0

мне удалось найти еще один вопрос в отношении изменения размеров и наткнулся на эту функцию:

private Bitmap ResizeBitmap(Bitmap b, int nWidth, int nHeight) 
{ 
    Bitmap result = new Bitmap(nWidth, nHeight); 
    using (Graphics g = Graphics.FromImage(result)) 
    { 
     g.InterpolationMode = InterpolationMode.NearestNeighbor; 
     g.DrawImage(b, 0, 0, nWidth, nHeight); 
    } 
    return result; 
} 

В измененное значение события для TrackBar, я:

pb_preview.Image = ResizeBitmap(cropped, zoomSlider.Value * cropped.Width, zoomSlider.Value * cropped.Height); 
Смежные вопросы