在picturebox上绘图是错误的位置

时间:2014-11-28 10:16:08

标签: c# image bitmap drawing picturebox

我正在绘制一个' 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中的PictureBoxStretchImage

对话框: The Picturebox is within the red

我希望问题很清楚。

抱歉英文不好。

最好的问候, 放松

3 个答案:

答案 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));