Gif123 还挺受欢迎,今天对 Gif123 v1.0.01 做了大幅改进:Jacen He
1、可以把外部 GIF 拖入 Gif123 工具栏直接预览,支持点击按钮直接「复制」。很多 GIF 工具都没有完善的复制功能,利用 Gif123 可以方便地解决这一问题。
2、在拖动界面选取录屏范围时,右下角会显示选框大小,得益于 aardio 中强大的 orphanWindow —— 我们只用一句代码就创建了这个酷酷的悬浮提示。
3、其他很多小细节的优化这里不细说了,虽然说是极简,做好 “简单” 这个事其实也并不容易。
…… 好吧,现在说一个最坑的问题,因为 GIF 能表达的颜色非常有限,所以容易出现颜色失真的问题。Gif123 之前的版本在录颜色丰富的图像时就会出现下面这样的问题:
今天对这个问题也做了改进 ,看新版 Gif123 录制同样图像的效果:
这并不会增加 GIF 的体积,但画质却有惊人的提升。
aardio 有一个传统,增强功能的同时一定要降低发行体积,Gif123 基于 aardio 中的 soImage 图像扩展库。这个 soImage 组件上一个版本的体积是 2.2 MB。在 aardio 中一个库都只有几KB 的大环境下,这太大了。
为了进一步降低 Gif123 的体积,我尝试过很多方法,甚至试过抛弃 soImage 直接用系统的 GDI 接口来录制 GIF 文件,这是我今天写的代码
//截屏
import gdip.snap;
var bmp = gdip.snap(,x,y,cx,cy);
//抓取鼠标指针
var cursor = {INT cbSize = 20; INT flags; pointer hCursor;struct pt = ::POINT() }
::User32.GetCursorInfo(cursor);
//合成鼠标指针
import gdip.graphics;
var graphics = bmp.getGraphics();
var hdc = graphics.getDc();
::User32.DrawIcon(hdc,cursor.pt.x,cursor.pt.y,cursor.hCursor);
graphics.releaseDc(hdc);
graphics.delete();
var buf = bmp.saveToBuffer("*.gif");
其实这样也行。
不过我还是成功地将将 soImage 组件的体积锐减到 500 多KB,打包就更小只有 200 多KB。功能不但没减少而且还有增强,增加了很多新函数。
新版 Gif123 正在做安全检测,暂未提供下载。但是在 aardio 新版本中已经包含了 Gif123 最新版本的源码 —— 可以直接运行: