C# 在picturebox上绘图的位置错误
当前,我在用鼠标单击将“x”绘制到图片框时遇到问题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
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
,您将需要额外的代码@tSizeMode
是StretchImage
问题显然与StretchImage
有关。问题是如何修复它。一个直截了当的解决办法是不经拉伸就进入某个领域。因此,要么不要拉伸图像,要么在上面放一些透明的东西,然后在上面画“X”。如果你能计算出比率(原始/当前),那么乘坐标也应该有效。@Sinatr你是对的。问题是StretchImage
。将其恢复为正常
,现在工作正常:)所有不同的图像都适合于picturebox,如果图像太小,则有一个透明的背面。非常感谢。使用SchadenFahrzeugPictureBox.PointToClient(新点(e.X,e.Y))代码>X不显示在picturebox中。我想它在屏幕上的其他地方。。