我正在绘制一个' x'通过mouseclick进入图片框。
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_MouseClick(object sender, MouseEventArgs e)
上运行此功能。 X始终位于鼠标定位右下方的某个位置。如果我点击左上角,鼠标和X之间的差异会更小,如果我点击右下角。
SizeMode
中的PictureBox
为StretchImage
。
对话框:
我希望问题很清楚。
抱歉英文不好。
最好的问候, 放松
答案 0 :(得分:1)
更改此部分
new PointF(e.X, e.Y)
类似
new PointF(e.X * pictureWidth / SchadenFahrzeugPictureBox.Width,
e.Y * pictureHeight / SchadenFahrzeugPictureBox.Height);
答案 1 :(得分:1)
你需要为拉伸包含一些因素,可能是这样的:
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' 光标,方便放置。
答案 2 :(得分:0)
您可能需要做两件事。
首先是DrawString函数,将文本想象成矩形,e.X和e.Y坐标是矩形的左上角。
其次,您获得的e.X和e.Y职位可能是全球性的,因此您需要使用
SchadenFahrzeugPictureBox.PointToClient(new Point(e.X,e.Y));