2010.7.29 DDS也支持A4R4G4B4之类的16位格式,并且可透明显示,而PS中BMP格式也可以保存为这种格式,但是保存后的BMP却不支持透明了,我认为这一个是BMP格式的规范的一个不合理,一个是PS要遵守BMP规范造成的,实际上A4R4G4B4要显示为透明液很简单,在我的程序我就将他们显示为透明了。
2010.7.21 完成对DDS的DXT1,DXT3,DXT5格式的保存,可以说这方面的VB代码只有我一个人做过。
2010.7.20 参考 MSDN和Freeimage完成 DDS格式的读取,从而使得可读取的图像格式达到了22种,也决定暂时不研究图像格式了。
2010.7.15 参考CODEPROJECT和GIMP的代码,完成非压缩格式的DCM格式的读取。
2010.7.12 参考GIMP的代码以及FITS文件的相关资料,完成FIT格式的读取和保存,但确实测试图像。
2010.7.10 参考Zgke的相关代码,完成RSB和IFF文件的解码和编码,这样我可以解码和编码的图像共有19种了。
2010 7.1 完成RAS和SGI格式的解码和编码。
2010.6.30 知道了XBM格式的图像吗,这是个比较神奇的格式,可以将VC的代码转换成黑白图像,花了一天的时间,完成了改格式的解码和编码。
2010.6.29 心血来潮,又无意打开了GIMP,发现GIMP可以将PNM格式保存为ASCII方式的,呵呵,那么我也要加入这个功能,2个小时左右也就搞定了,不过这种方式保存的图像就要大很多了,并且编码的方式对图像文件的大小有一定的影响。
20106.28 整理了下所有格式的解析代码,到目前为止已经可以解码和编码的图像格式多达14种:主要有
BMP JPG PNG TIF GIF TGA PCX PNM PSD WMF EMF ICO WBMP PBT格式
其中JPG\PNG\TIF\GIF是借助于GDI+打开的,当然对于JPG和GIF完全可以不用GDI+,PNG格式我也有相关解码和编码的代码,只是还不如GDI+稳定,TIF到时了解不多。
2010.6.27 由于文档说明不全,始终无法定位到通道数据的位置,痛苦了一天,只好放弃更新,还是停留在读取PSD最终合成的图像的那一步,不过修正了带有alpha信息的索引色的读取和通道数大于4时的错误读取。同时也更新了PSD缩略图的读取效果,正是因为PSD缩略图是用JPG格式流保存的,所以PSD格式的预览中对于那些带有透明通道的图像的实现是不正确的。
2010.6.25 参考GIMP和PS6.0的文档说明想进一步解析PSD格式的图层数据,目前已经可以得到图层数,图层名称等属性。
2010.6.24 完成PS的ACO,ACT,ACF格式的读取和保存工作,ACO是颜色配置文件,ACT是调色板文件,大小在调色板不为256个或有透明颜色的时候为772字节,最后四个字节记录了调色板数量以及透明色的所引,其他情况为768字节。 ACF为自定义滤镜的矩阵保存函数。注意PS的字节摆放顺序和我们正常的是相反的。
2010.6.23 完成了对TGA格式的解码和编码的大部分工作,TGA确实是不支持4位索引色和单色位图。编码中的RLE算法参考Lavolpe的代码,执行效率很高。
2010.6.22 PS对TGA格式的支持并不全面,他保存的是TGA2.0的,但是对于索引色和灰度图居然不支持RLE压缩,这是不够的。重写的代码修正了一些BUG,对TGA2.0格式的判断直接利用了他的signature标示,1.0格式的判断要严格的多,在编码过程中注意到VB的结构体和ReadFile函数之间有些不和谐,主要是字节对齐问题。
2010.6. 21 看了下第一个版本的打开TGA格式的代码,写的太过于混乱了,而且读取效率底下,因此打印了一份TGA格式的英文说明,准备重新写下。
2010.6.20 用了下Paint.net,发现他还可以打开DDS文件,因此试着解析DDS文件,参考了一些资料,本以为不难,后来发现Paint.net的图像压缩部分是 调用的DLL做的,晕,我是搞绿色软件的,看样子这种格式暂时不去考虑的吧。
2010.6.19 完成WBMP格式的解码和编码,WMBP是手机上可识别的一种图像,目前只支持单色位图。这个的解析和编码的难点就是图像高度和宽度的获取,其数据也没有 压缩过,数据部分的解码和读取和PNM格式类似。
2010.6.17 完成PNM格式(PBM\PGM\PPM)格式的读取和保存。
2010.6.16 开始解码PNM图像格式,PNM格式可支持单色位图、灰度图、真彩色24位图像,其解析的难点是文件头信息的读取,PNM格式是无压缩的格式,如果以 ASCII码方式保存的话其文件体积较BMP还要大,但是可以保存一些原始信息,因为和设置他的像素最大亮度值大于255,如果以Rawbit方式保存和 BMP的体积差不多(一般要小点)。PNM不保存无效的扫面行尾部的数据。
2010.6.14 优化之前的打开PCX的类模块。
2010.6012 修改BmpParser模块,放弃之前全部用GD+读取的方式,改之用自己读文件的方式,这样速度本身要提高一倍,读取时占用内存量也要少一半,并且对于 16位图像的支持更全了,可打开保存X1R5GB5,X4R4G4B4,R5G6B5,R6G5B5,R5B5G6等格式,可打开RLE压缩的BMP(这 个目前还是依靠GDI+),但目前还不支持保存为RLE压缩的BMP。可支持翻转行序功能,
2010.6-10 改用CreateAcceleratorTable加速键来实现类似于CTRL+SHIFT+I这样类似于PS而VB本身无法实现的快捷键,但是所有VB 的加速键都无效了。
2010-6-7 优化checkbox,Radiobutton、CoolTabs等控件的内部代码,删除一些无用的功能,更节省资源。
2010.5.27 修改了自定义图像输出的一个BUG,该BUG是由于未能准确计算线性隐射的坐标导致的,可能会使本应该透明的部分不透明。
2010.5.24 整理了下canvas中的部分代码。
2010.5.23 更改读取PBT模块的一些代码,创建一个CreateFromGdipImage函数以从GDI+的image对象创建CIMAGE类,注意灰度图像要判 断调色板。
2010.5.22 今天主要是完成PBT格式的读写以及快速获取缩略图等操作。PBT格式内部采用PNG压缩来压缩数据,包括缩略图也是PNG压缩的,在编码过程 中,GetEncoderClsID的第二个参数应该是4个long元素的数组,而我一开始搞成1元素的,由于存在copymemory等操作,导致VB 系统不断崩溃,一开始还以为是CreateStreamOnHGlobal之类的函数操作有误,原始是这个小错误。