【问题标题】:Drawing on picturebox is getting the wrong location在图片框上绘图的位置错误
【发布时间】:2015-01-26 23:32:40
【问题描述】:

我目前在通过鼠标单击将“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_MouseClick(object sender, MouseEventArgs e) 上运行这个。 X 总是放置在鼠标位置的正下方。如果我单击左上角,鼠标和 X 之间的差异会更低,然后单击右下角。

PictureBox 中的SizeModeStretchImage

对话框:

我希望问题很清楚。

抱歉英语不好。

最好的问候, 放松

【问题讨论】:

  • PictureBoxSizeMode 是什么?如果不是NormalAutosize,您将需要额外的代码!
  • @TaW SizeModeStretchImage
  • 问题显然与StretchImage 有关。问题是如何解决它。一个直接的解决方案是在没有拉伸的情况下吸入一些东西。所以要么不要拉伸你的图像,或者,例如,在它上面放一些透明的东西,然后在那里画"X"。如果您可以计算比率(原始/当前),那么乘以坐标也应该可以。
  • @Sinatr 你是对的。问题是StretchImage。将其恢复到Normal,现在它工作正常:) 所有不同的图像都适合图片框,如果它们太小,则有一个透明的背面。谢谢!

标签: c# image bitmap drawing picturebox


【解决方案1】:

改变这部分

new PointF(e.X, e.Y)

类似

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

【讨论】:

    【解决方案2】:

    你需要为拉伸添加一个小因素,可能是这样的:

    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”置于光标之上,以便于放置。

    【讨论】:

      【解决方案3】:

      您可能需要做两件事。

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

      你得到的第二个e.X和e.Y位置可能是全局的所以你需要使用

      SchadenFahrzeugPictureBox.PointToClient(new Point(e.X,e.Y));
      

      【讨论】:

      • 使用SchadenFahrzeugPictureBox.PointToClient(new Point(e.X,e.Y));后,图片框内不再显示X。我认为它在屏幕上的其他地方..
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-16
      • 1970-01-01
      • 2016-08-08
      • 1970-01-01
      相关资源
      最近更新 更多