C# 在picturebox上绘图的位置错误

C# 在picturebox上绘图的位置错误,c#,image,bitmap,drawing,picturebox,C#,Image,Bitmap,Drawing,Picturebox,当前,我在用鼠标单击将“x”绘制到图片框时遇到问题 Bitmap currentFahrzeugSchadenImage = new Bitmap(this.SchadenFahrzeugPictureBox.Image); Graphics g = Graphics.FromImage(currentFahrzeugSchadenImage); g.DrawString("X", new Font("Tamoha", 15), Brushes.Red, new PointF(e.X, e.Y

当前,我在用鼠标单击将“x”绘制到图片框时遇到问题

Bitmap currentFahrzeugSchadenImage = new Bitmap(this.SchadenFahrzeugPictureBox.Image);
Graphics g = Graphics.FromImage(currentFahrzeugSchadenImage);

g.DrawString("X", new Font("Tamoha", 15), Brushes.Red, new PointF(e.X, e.Y));

this.SchadenFahrzeugPictureBox.Image = currentFahrzeugSchadenImage;
我在SchadenFahrzeugPictureBox\u鼠标单击(对象发送器,鼠标指针)上运行此操作。。X总是放在鼠标位置的正下方。如果我单击左上角,鼠标和X之间的差值将小于单击右下角

PictureBox
中的
SizeMode
StretchImage

对话框:

我希望问题是清楚的

对不起,英语不好

致以最良好的祝愿,
放松

你可能需要做两件事

首先使用DrawString函数,将文本想象为矩形,e.X和e.Y坐标是矩形的左上角

其次,你得到的e.X和e.Y位置可能是全局的,所以你需要使用

SchadenFahrzeugPictureBox.PointToClient(new Point(e.X,e.Y));
更改此部分

new PointF(e.X, e.Y)
差不多

new PointF(e.X * pictureWidth / SchadenFahrzeugPictureBox.Width,
    e.Y * pictureHeight / SchadenFahrzeugPictureBox.Height);

你需要包括一些拉伸的因素,可能是这样的:

float fx =  1f * SchadenFahrzeugPictureBox.ClientSize.Width / currentFahrzeugSchadenImage.Width ;
float fy =  1f * SchadenFahrzeugPictureBox.ClientSize.Height / currentFahrzeugSchadenImage.Height;

using (Font f = new Font("Tamoha", 15) )
{
   SizeF size = g.MeasureString("X", f);
   g.DrawString("X", , Brushes.Red, new PointF(e.X / fx, e.Y / fy - size.Height));
}

这将适用于
SizeModes=StretchImage
,并将“X”置于光标上方,以便于放置。

PictureBox的
SizeMode
是什么?如果它不是
Normal
Autosize
,您将需要额外的代码@t
SizeMode
StretchImage
问题显然与
StretchImage
有关。问题是如何修复它。一个直截了当的解决办法是不经拉伸就进入某个领域。因此,要么不要拉伸图像,要么在上面放一些透明的东西,然后在上面画“X”。如果你能计算出比率(原始/当前),那么乘坐标也应该有效。@Sinatr你是对的。问题是
StretchImage
。将其恢复为
正常
,现在工作正常:)所有不同的图像都适合于picturebox,如果图像太小,则有一个透明的背面。非常感谢。使用
SchadenFahrzeugPictureBox.PointToClient(新点(e.X,e.Y))X不显示在picturebox中。我想它在屏幕上的其他地方。。