解决  帮助DrawImage(图像图像,int x,int y)

tim8w

知名会员
已加入
2020年9月8日
留言内容
81
编程经验
10+
我有一个定义为(0,40,475,244)的矩形,要在其中绘制一个128x128图像。我正在调用DrawImage,如下所示:

C#:
Point pImage = new Point();
pImage.X = (rPanel.Right - rPanel.Left) / 2 - this.BackgroundImage.Size.Width / 2;
pImage.Y = (rPanel.Bottom - rPanel.Top) / 2 - this.BackgroundImage.Size.Height / 2;
g.DrawImage(this.BackgroundImage, pImage.X, pImage.Y);

生成的图像最终在错误的位置绘制。

1613196276693.png


应该更像这样:

1613196338589.png


我知道它一定很明显,但是我看不出Image位置的计算出了什么问题...
 
Solution
我设法重现了您的问题。

打开.png文件,看起来它的格式为72 dpi,而Windows默认为96 dpi。因此,您需要让Windows将图像缩放到适当的区域。就像是:
C#:
var ptImage = new Rectangle()
{
    X = rect.Width / 2 - _img.Width / 2 + rect.Left,
    Y = rect.Height / 2 - _img.Height / 2 + rect.Top,
};

g.DrawImage(_img, new Rectangle(ptImage, _img.Size));

In the image below, notice the bigger image drawn by DrawImage(Image, Point), and then painted over by the DrawImage(Image, Rectangle) which is right in the green rectangle where we expected the image to be drawn into.

屏幕截图_1.png

跳伞者

工作人员
已加入
2019年4月6日
留言内容
2,597
地点
弗吉尼亚州切萨皮克
编程经验
10+
我设法重现了您的问题。

打开.png文件,看起来它的格式为72 dpi,而Windows默认为96 dpi。因此,您需要让Windows将图像缩放到适当的区域。就像是:
C#:
var ptImage = new Rectangle()
{
    X = rect.Width / 2 - _img.Width / 2 + rect.Left,
    Y = rect.Height / 2 - _img.Height / 2 + rect.Top,
};

g.DrawImage(_img, new Rectangle(ptImage, _img.Size));

In the image below, notice the bigger image drawn by DrawImage(Image, Point), and then painted over by the DrawImage(Image, Rectangle) which is right in the green rectangle where we expected the image to be drawn into.

屏幕截图_1.png
 
Last edited:
解决方案

tim8w

知名会员
已加入
2020年9月8日
留言内容
81
编程经验
10+
我设法重现了您的问题。

打开.png文件,看起来它的格式为72 dpi,而Windows默认为96 dpi。因此,您需要让Windows将图像缩放到适当的区域。就像是:
C#:
var ptImage = new Rectangle()
{
    X = rect.Width / 2 - _img.Width / 2 + rect.Left,
    Y = rect.Height / 2 - _img.Height / 2 + rect.Top,
};

g.DrawImage(_img, new Rectangle(ptImage, _img.Size));

In the image below, notice the bigger image drawn by DrawImage(Image, Point), and then painted over by the DrawImage(Image, Rectangle) which is right in the green rectangle where we expected the image to be drawn into.

查看附件1380
谢谢。那个有效。我只需要将其应用于其他布局,就可以了。与往常一样感谢您的帮助!
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,974
地点
英国
编程经验
10+
拜托了,如果您能记住问一个问题,那么无论从谁那里得到想要的答案,都可以记住将您的问题标记为已解决,并将帖子标记为解决方案。
 
最佳 底部