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还要大,但是可以保存一些原始信息,因为和设置他的像素{zd0}亮度值大于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做鼠标移出检测的方式,xx采用子类 化自绘制。
2010.5.18 VBAdvisior 给的GDI+版本的双线性插值速度要比我的快很多,晚上尝试修改代码,但速度未有改进。
2010.5.17 发现GDI+的旋转在四边边缘至少有两个边缘无法抗锯齿,因此抛弃GDI+,尝试对ZYL910的旋转代码进行改进,改进效果显著,可以xx抗锯齿,采用 了双线性插值方式。