图像放缩以及亚像素显示

设图像大小100*100。图像中1个单位代表实际1mm。原比例显示,此时显示在设备坐标上是100像素*100像素。若要在设备坐标上画一条直线,该直线代表了实际10mm,那么体现在设备坐标上就是10个像素。也就是要在屏幕上画一条10像素长的直线才能满足要求。

若图像的显示放大10倍,图像的大小依然是100*100,图像中1个单位代表实际1mm,这一点不会受到放缩显示的影响。此时图像显示在设备坐标上是1000像素*1000像素。若要在设备坐标上画一条直线,该直线代表了实际10mm,那么体现在设备坐标上就是100个像素。也就是要在屏幕上画一条100像素长的直线才能满足要求。

 

根据上述情况,那么可以构造这样一个坐标系:该坐标系专门用于测量与绘制,不妨称为绘制坐标系。绘制坐标系的原点与图像原点重合,绘制坐标系的单位长度与图像的单位长度相同。只要测定好1个图像单位代表实际的物理尺寸是多少,那么该绘制坐标系的1个单位就代表多少物理尺寸。

由于该绘制坐标系始终都与图像坐标系的原点及单位长度保持一致,所以绘制坐标系会随着图像的放缩平移而改变其屏幕显示。唯一与图像坐标系不同的是,绘制坐标系的坐标都是用浮点数表示。

依然取上面放大10倍显示的例子。想要屏幕上画一条3.1mm长的直线,于是在屏幕上画了一条31个像素长度的直线,其坐标是(0,0)——(0,31)。那么根据放缩比,可以求得绘制坐标系中的直线长度是3mm,其在绘制坐标系中的坐标是(0.0,0.0)——(0.0,3.1)。但该直线在图像坐标系中的坐标是(0,0)——(0,3)。

同理地,现在有个图像坐标系中的亚像素点(0.0,3.1)。图像依然放大10倍显示。这个点在图像上,其坐标应该是(0,3)附近。为了能在屏幕上准确显示,于是图像放大10倍显示,此时该点在绘制坐标系中依然是(0.0,3.1),但根据放缩比,其显示在设备坐标系中就变成了(0,31)。于是在设备坐标系中也就是屏幕上准确地显示了该点的位置。

同理,在屏幕的显示区域用鼠标指向(0,31)点,那么可以得到其亚像素坐标是(0.0,3.1),其像素坐标是(0,3)。

 

在此过程中,取逻辑坐标系与设备坐标系始终一致,绘制坐标系与图像坐标系相同。另外绘制坐标系的原点在逻辑坐标系中的位置以及放缩比需要进行保存,并且随着平移及放缩操作实时更新。

你可能感兴趣的:(理论基础,图形图像)