C# picturebox点击内容与实际图片位置不符合的解决方法

在picturebox中,当你设置为zoom模式下,图像会被等比例拉伸填充,此时你在图像上进行选取等操作时,鼠标点击的位置和图像中的像素不会再一一对应,因此需要进行一个简单的坐标映射

首先定义几个变量

private int[] width = new int[2];
private int[] height= new int[2];
float scaler = 0;

宽高两个分别储存picturebox和原图的尺寸,scaler储存缩放比,接下来对他们进行赋值

width[0] = capture.Width / 2;
height[0] = capture.Height / 2;
width[1] = pictureBox.ClientSize.Width / 2;
height[1] = pictureBox.ClientSize.Height / 2;
float scaleX = (float)width[1] / width[0];
float scaleY = (float)height[1] / height[0];
scaler = scaleX < scaleY ? scaleX : scaleY;

这里全部除以2是方便后面的坐标映射计算。scaler缩放比在运算时为了确保图像比例一致,会选择最小的值进行缩放,所以这里选择两个方向上更小的值。

private int Cor_Transform_x(int x)
{
    return (int)((x - width[1]) / scaler + width[0]);
}
private int Cor_Transform_y(int y)
{
    return (int)((y - height[1]) / scaler + height[0]);
}

最后给两个函数分别计算x和y方向上的偏移,输入量是鼠标的坐标,返回值是实际图像的坐标,这样可以在使用picturebox的zoom模式依然选中正确的像素

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AnProphet

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值