【问题标题】:How can I get the exact location of cursor on image in Picturebox如何在 Picturebox 中的图像上获取光标的确切位置
【发布时间】:2009-08-30 14:40:22
【问题描述】:

我有一个图片框,其中的图像可以使用不同的值进行缩放。然后我尝试找出光标在图片框上的位置。我在图片框鼠标移动事件上写了以下代码:

int x = (2 * e.X - pictureBox1.Width + pictureBox1.Image.Width) / (2 * _scale / 100);
int y = (2 * e.Y - pictureBox1.Height + pictureBox1.Image.Height) / 2 * _scale / 100);

这里的 _scale 是缩放后的值,可以是 10、50、100 或 200 等。

我的问题:

如果缩放大于 100%,它会给出正确的值。但是如果缩放小于 100,它会给出不正确的值。如果即使缩放小于 100%,我如何给出正确的值?

更多解释:

对于缩放,我编写了以下代码。

pictureBox1.Image =  new Bitmap(Orignal_image, (int)( Orignal_image .Width * scale / 100), (int)( Orignal_image.Height * scale / 100));

编辑:图片框的大小模式为centerImage。并且图片框宽度不必等于图像。它的宽度可能小于图像,然后图像显示在图片框的中心。我只需要图像的位置。 (即,0 像素由图像的起始位置而不是图片框给出)。

【问题讨论】:

    标签: c# .net gdi+ image-manipulation


    【解决方案1】:

    看起来罪魁祸首是整数除法:10 / 100 = 0

    使用浮点除法或重新排列表达式:

    int x = (e.X - (pictureBox1.Width - pictureBox1.Image.Width) / 2) * 100 / _scale;
    

    【讨论】:

    • 是的,先生,它是正确的,但有一些问题是我希望左侧起始位置为 0,向右增加 1,2,3,....等等。但它给出了左侧 -(最大宽度),例如 -1024 并且它增加到右侧,直到它在右侧达到 0。
    【解决方案2】:
    int x = e.X * 100 / _scale;
    int y = e.Y * 100 / _scale;
    

    【讨论】:

    • 不,先生,如果图片框的宽度等于图像的宽度,它可能是正确的。但就我而言,没有必要。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-09
    • 1970-01-01
    • 2017-11-19
    • 2015-11-09
    • 1970-01-01
    • 2023-03-14
    • 2011-02-04
    相关资源
    最近更新 更多