0

我目前有一个 Windows 窗体应用程序,中间有一个图片框,我也在绘制各种图像。图像画得很好,只是它们都被放大了 25%。我还应该补充一点,我在 Paint 方法中绘制所有内容,使用 PaintEventArgs 来获取图形设备。

我确保将 SizeMode 设置为 Normal,我一遍又一遍地检查图形对象的比例因子是 1,并且我传递给paint方法的所有图像对象都是它们应该的大小,但是当它们被绘制时它们的尺寸不同。

到目前为止,我一直在调用 g.drawImage(image, Rectangle) 并将图像的宽度和高度作为 Rectangle 的宽度和高度传递,以便它们被迫以正确的大小绘制,但我觉得这应该做一个短期的修复,我忽略了一些简单的事情。

任何帮助都会很棒,在此先感谢。

代码如下(仅重要位):

public class Level : PictureBox
{
    ...
    private Image image;
    ...

    public Level(TabPage parent, Panel propertiesPanel, ItemManager items, string levelName)
    {
        ...

        image = Image.FromFile(@"Levels/" + levelName);
        Size = image.Size;
        SizeMode = PictureBoxSizeMode.Normal;

        MouseClick += new MouseEventHandler(level_MouseClick);
        MouseMove += new MouseEventHandler(level_MouseMove);
        Paint += new PaintEventHandler(level_Paint);

        Invalidate();
    }

    private void level_Paint(object sender, PaintEventArgs e)
    {
        Graphics g = e.Graphics;
        g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;

        //With the rectangle fix (drawing to correct size)
        g.DrawImage(image, new Rectangle(0, 0, image.Size.Width, image.Size.Height));
        ////Without the fix (as i thought it should be be this is where it scales it)
        //g.DrawImage(image, new Point(0, 0));

        drawPlacedItems(g);
        drawItemPreview(g);
    }
4

1 回答 1

1

这听起来像是您的图像的HorizontalResolutionVerticalResolution属性在您不希望它们时被应用,根据 Jeremy 的指向Image sizing issue in bitmapHorizontalResolution的链接修改您的代码,以确保VerticalResolution在调用之前重置或忽略DrawImage.

于 2013-06-04T02:27:18.510 回答