8.2、由于真彩色图像具有红、绿、蓝三种颜色分量,因此在进行DCT变换时,应该将三种颜色分开进行DCT运算,为了将三种颜色分开,再程序中定义了三个数组,用来在内存中分开存放三种颜色的数据。
ReDim pdata_r(Me.Picture1.ScaleWidth, Me.Picture1.ScaleHeight)
ReDim pdata_g(Me.Picture1.ScaleWidth, Me.Picture1.ScaleHeight)
ReDim pdata_b(Me.Picture1.ScaleWidth, Me.Picture1.ScaleHeight)
这样虽然要用掉一部分内存,但是却能够比较方便的将不同的颜色分开,在进行DCT变换的时候先对8×8像素块中的红色进行DCT变换,然后将变换后得到的64个数据存入文件,接着对绿色进行变换,将绿色的64个数据存入文件,蓝色采用同样的方式。因此在存储的文件中,数据不时按像素顺序存放的,而是以64个像素为单位,采用红、绿、蓝三色分开存储。
8.3、在进行IDCT的时候,由于事先对数据进行过量化,造成了一部分数据失真,因此在IDCT后,可能会由于误差的原因导致出现有数据为负数或者是大于255的数据。这样的数据如果参与颜色的计算和显示的话,将会导致还原后的图像中出现难看的杂色像素,如图六所示:
要解决这个问题,只需要检查经过IDCT还原后的数据,如果数据小于0,则让它等于0,如果大于255则让它等于255,经过这样的处理后,还原的图像上就变得很干净,效果如图七所示。
文章来源于领测软件测试网 https://www.ltesting.net/