调整中心

时间:2016-01-28 23:59:07

标签: c# image bitmap resize picturebox

我想使用轨迹栏来重新调整在.._Paint事件中绘制的图像的大小。

到目前为止,我已将文件中的图像加载到名为original的位图中。现在我有另一个名为' cropped'它存储了原始图像的一部分。

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

我有一个名为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);

在我的跟踪栏更改值事件中,我使pb_preview无效,因此每次更改值时,pb_preview都会以更大的值绘制图像。

问题是,每次更改轨迹栏的值时,图像都不会在中心调整大小,而是会调整大小,但每次调整大小时,它会向左稍微移动,直到最大尺寸调整后的图像是不合时宜的。

1 个答案:

答案 0 :(得分: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);