在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模式依然选中正确的像素