我目前有一个Windows窗体应用程序,其中间有一个pictureBox,我也在绘制各种图像。这些图像画得很好,除了它们都被缩小了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);
}
答案 0 :(得分:1)
这听起来就像您不想要的时候应用了图片的HorizontalResolution
和VerticalResolution
属性,根据Jeremy与Image sizing issue in bitmap的链接修改代码,以确保在致电HorizontalResolution
之前,会重置或忽略VerticalResolution
和DrawImage
。