Crimm Imageshop 2.0 开发进展


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之类的函数操作有误,原始是这个小错误。
2010.5.21晚上    利用WH_CBT钩子更改默认MSGOBX对话框的文字,其中messagebox的句柄用GetActiveWindow火的,以使得确认窗体始终显示 在最前。
2010.5.21下午     Jay36说只需要在usercontrol控件的getfocus事件中写入setfocus m_hwnd就可以解决自绘combox控件的焦点状态显示问题,果然如此,有的时候把问题想复杂了反而不好。下午修改了打开对话框的一些代码。更改了屏 幕截图的显示效果,之前是选中的部分显示用的alphablend函数,类似于Exploer下的选择效果,这个和QQ的截屏是相反的。实际上应该在加载 窗体的时候就把整个界面用alphablend混合一下,整体变暗,然后备份一个原始图像到内存,选中的部分用bitlbt函数显示,这样的效果就是选中 的部分高亮,其他部分暗淡一些。还更改了原先的LINE方法为API方式,因为LINE方法会导致VB自动调用REFRESH方法,浪费资源。
2010.5.21 上午     解决combox控件的焦点问题,一定要处理WM_MOUSEACITVATE 消息,不然别的控件比如textbox无法得到失去焦点事件。
2010.5.20  晚上修改新建界面,修正TextBox控件的ToolTipText属性,自定义控件的这个属性只有当鼠标在 Usercontrol上时才能反映,如果UC上已经有了其他控件,就要使其他的控件的提示也设置为相同值。修正图像大小的计算公式,增加背景颜色为透明 一项,当用户选择灰度模式时,透明选项不可用(同PS不同)。同时注意到,窗体在unload的时候,确实是要加上一句 set frm=nothing 的语句,这句能撤掉释放掉窗体的资源。
2010.5.20  上午在工厂办公室里完成了自绘combox控件的焦点显示问题,该问题VB加速站上的解决方案过于复杂,其实只需要拦截父窗体,也就是那个 usercontrol的相关焦点消息做显示处理就可以了,但是要把控件的CanGetFocus属性设置为True.当然也还存在问题,比如当前焦点设 置在某个combox上,然后点下其他的应用程序,在点回我们的程序,则Combox无焦点了,还有对方向键的支持不够。
 2010.5.19  重新编写按钮控件,使得其支持快捷键、支持空格选择、支持虚线焦点框,外观样式亦有所改进,且抛弃了原先的Timer做鼠标移出检测的方式,完全采用子类 化自绘制。
2010.5.18 VBAdvisior 给的GDI+版本的双线性插值速度要比我的快很多,晚上尝试修改代码,但速度未有改进。
2010.5.17  发现GDI+的旋转在四边边缘至少有两个边缘无法抗锯齿,因此抛弃GDI+,尝试对ZYL910的旋转代码进行改进,改进效果显著,可以完全抗锯齿,采用 了双线性插值方式。

posted on 2010-06-21 15:52  彭佳乐  阅读(1867)  评论(9编辑  收藏  举报

导航