duilib官方库提供了个gif控件,用的是gdi+解析和绘制的,同时没有接入duilib控件本身的背景色,文本等绘制,包括图片的source/dest/xtiled/ytiled/mask等属性也都没有做支持。
可以满足基本的使用需求。
我需要一些效果比较好的动态图来做展示,gif显然不行,另外的动图就是webP和Apng,最决定先支持apng,webP后续有需求的话,再研究支持。
源码仓库地址:https://github.com/juhuaguai/duilib
其中关于gif和apng的改动有:
GIF控件:
1.gif控件重做,继承自Label控件,让它支持背景色和文本绘制。
2.gif控件移除掉gdi+的解析和绘制,改为duilib自带的stbimage去解析,生成每一帧的HBITMAP,在PaintImage时去绘制对应的帧,这样就融入了duilib的DoPaint体系,支持了背景色,文本等。
3.结合duilib里面的TDrawInfo结构体,让gif的背景支持bkimage="file='xxx.gif' sorce='x,x,x,x' dest='x,x,x,x' xtiled='true' ytiled='true' mask='ffxxxxxx'"等属性。
4.参考了button,基于gif控件做了gifbutton控件,即背景可以设置为动态图的按钮。
APNG控件:
1.apng控件重做,之前一版是基于libpng库的,新的代码直接移除了Libpng库,找了份支持apng的stbimage代码来解析。
2.在apng控件中完全重写了帧的解析处理,主要是参考libpng的例子。与gif一样,生成每一帧的HBITMAP(这个是已经处理过的完整的帧位图,不是apng里面直接解析出来还需要二次处理的帧)。
3.其他流程处理与gif一样了。
4.同样也做了支持apng的动画按钮控件。
最后,由于水平有限,可能会存在不足和bug,欢迎提建议和bug。