图片并不涵盖整个PictureBox

时间:2017-10-24 10:02:06

标签: c# image image-processing picturebox

我正在使用C#创建一个图像查看器,并且在缩放(缩放)PictureBox方面存在一个小问题。

我在PictureBox内有Panel,我可以使用左上方的控件缩放(缩放)图像,并使用鼠标滚轮就可以了。但是,在某些特定的缩放比例下,图像并不覆盖整个PictureBox

enter image description here

例如,SO徽标(100x116像素),100%和200%:

enter image description here

右边的图像是199x131像素,而PictureBox是200x132。

我已将BackColor的{​​{1}}设置为PictureBox,以使问题显而易见。

这并不总是会发生,只是在特定的缩放级别。这是为什么?我做错了吗?

我可以将Red的{​​{1}}设置为BackColor的{​​{1}},以给出图像覆盖整个PictureBox的幻觉,但我而是解决问题。如果我不能,我将应用棘手的解决方案。

相关代码:

BackColor

我还创建了一个repository,以防有人想要现场检查应用。

2 个答案:

答案 0 :(得分:1)

您需要在ImageBox_Paint中调整矩形。试试这个:

private void ImageBox_Paint(object sender, PaintEventArgs e)
{
    int add = ImageBox.Width / 200; 

    // disable interpolation (sharper pixels)
    e.Graphics.InterpolationMode = InterpolationMode.NearestNeighbor;
    // https://msdn.microsoft.com/en-us/library/ms142046(v=vs.110).aspx
    e.Graphics.DrawImage(image,
        new Rectangle(0, 0, ImageBox.Width + add, ImageBox.Height + add),
        0, 0, image.Width, image.Height, GraphicsUnit.Pixel);
}

答案 1 :(得分:0)

只需将PictureBox的SizeMode属性设置为Zoom即可。然后调整图片框的大小将自动使图像拉伸到其完整大小。

你甚至不需要那个Paint事件监听器;它是内置功能。只需将PictureBox的尺寸更改为图像的计算缩放尺寸即可。