duilib支持apng,gif支持文字、背景、图片的file/source/dest/xtiled/ytiled/mask等

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。

猜你喜欢

转载自blog.csdn.net/u012081284/article/details/112024158