想象一下,您正在WinForms应用中的700x700 PictureBox上绘制一张10x10 .png图片。问题是在PictureBox上向上和向左移动0.5像素的图片。 您可以在这里观看测试图片: 它是正方形,宽度为1px。
结果PictureBox看起来像: 你可以看到,这个边界的宽度并不是相同的,并且向左和向上移动0.5 px(我在PictureBox上称为px和px等效,因为这个来自10x10图片的px就像是100x100真实像素)。
在代码中我使用InterpolationMode.NearestNeighbor来正确显示大画布上的小图片。但它并没有改变结果。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
testBmp = new Bitmap("some_path_here\\test.png");
drawBitmapOnPictureBox(pictureBox1, testBmp);
}
private void drawBitmapOnPictureBox(PictureBox pictureBox, Bitmap bmp)
{
if (pictureBox.Size != bmp.Size)
{
float zoom = 60.0f;
Bitmap zoomed = new Bitmap((int)(bmp.Width * zoom), (int)(bmp.Height * zoom));
using (Graphics g = Graphics.FromImage(zoomed))
{
g.InterpolationMode = InterpolationMode.NearestNeighbor;
g.DrawImage(bmp, new Rectangle(Point.Empty, zoomed.Size));
}
pictureBox.Image = zoomed;
}
else
pictureBox.Image = bmp;
}
Bitmap testBmp;
}