C# GDAL 数字图像处理Part4 获得鼠标位置的地理坐标

        其实在程序设计中,很大部分的工作量都在搞懂Winform的各种控件及其接口,网上的讲解质量也良莠不齐,所以如何使用控件也是一个很苦恼的问题(舍友深受困扰:怎么没有系统性讲Winform的资料)。我也在考虑要不要写一下文章讲讲comboBox、listView、tabControl、pictureBox、treeView之类的控件,因为写起来也很费时费事(21届的同学看到的时候我应该大四了说不定会有时间来灌水,如果需要可以评论或者私信我哈哈哈哈),之后再考虑。

        回归正题,这篇文章写的,如何获得鼠标的地理位置?

        在Gdal中给我们提供了这样一个函数:

        Mydataset.GetGeoTransform(double[] argout);

        传入的参数应该是一个长度为6的double数组,执行代码之后数组就会被赋值。这六个参数的用法是:

        GeoX = argout[0] + argout[1] * x + argout[2] * y

        GeoY = argout[3] + argout[4] * x + argout[5] * y

        GeoX与GeoY就是地理坐标,xy是在原始Image上的位置。注意,这里说的是 原始Image 。就是说,通过缩放后显示的Bmp图像,读取鼠标在其上的坐标,应该换算成在原始Image上的坐标。其实换算也很简单:

        原始的X坐标 = 鼠标在BMP上的X坐标 * (Dataset的宽度 / BMP的宽度)

        原始的Y坐标 = 鼠标在BMP上的Y坐标 * (Dataset的高度 / BMP的高度)

        这里建议大家,可以把(Dataset的宽度 / BMP的宽度)(Dataset的高度 / BMP的高度)作为缩放因子放到类成员变量中存储起来,以便之后的使用。

        至于怎么获得鼠标在PictureBox上的坐标呢?我们点击PictureBox,打开它的属性,点击事件(闪电),我们可以看到 鼠标/Mouse 事件,双击其中需要选用的事件,C#会自动生成一个函数,如下:

private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
        {
            
        }

        我们使用  e.X  与  e.Y  便可以访问鼠标相对于控件左上角的坐标啦~

        好,这一篇博文便写到这儿(准备下课了 ^-^ )

你可能感兴趣的:(数字图像处理,1024程序员节,图像处理,c#)