gif画质提升、体积缩小

admin2022-03-05  4.5K+

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 最新版本的源码 —— 可以直接运行:

 

转载请注明原文地址: http://aardio.net/read-300.html
最新回复(0)
aardio问答
aardio编程语言