社区
界面
帖子详情
请教解析GIF文件的问题
anothervip
2006-07-11 10:15:26
请问如何处理89a中的Disposal Method(扩展块0x21 0xF9),其中的STAY, BACKGROUND COLOR, BACK PREVIOUS。现在要在嵌入式平台实现功能,做过的兄弟请赐教。
...全文
379
14
打赏
收藏
请教解析GIF文件的问题
请问如何处理89a中的Disposal Method(扩展块0x21 0xF9),其中的STAY, BACKGROUND COLOR, BACK PREVIOUS。现在要在嵌入式平台实现功能,做过的兄弟请赐教。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ppzine
2006-07-12
打赏
举报
回复
codeproject上有一个gif解码的工程,你可以下来看看,不过代码有点bug,线程控制好像有问题
anothervip
2006-07-12
打赏
举报
回复
谢谢 ringphone(临风),有个小问题:trans_index=(int)*lpGifData*3+2; 为什么要乘3+2 ?我在文档里没查到,thanks
ringphone
2006-07-12
打赏
举报
回复
sorry,是这样的,因为GIF文件调色板数据是rrggbb格式,不能用COLORREF*指针指向该数据,只能是LPBYTE类型,因此取颜色就需要索引*3,*3+2是我程序代码里加的,因为我程序中设置透明色的代码就是类似SetKeyColor(RGB(gPal[trans_index],gPal[trans_index-1],gPal[trans_index-2]));
ringphone
2006-07-12
打赏
举报
回复
乘3+2得到透明色索引,gif89a文档里有的啊。
sssn
2006-07-11
打赏
举报
回复
阿牛哥也来混分?你可不是这种人啊!
WecanHuang
2006-07-11
打赏
举报
回复
不懂
帮顶
sssn
2006-07-11
打赏
举报
回复
当你有一天冲到那个级别了,你才发现问问题已经不好开口了
sssn
2006-07-11
打赏
举报
回复
楼上明显是混分冲双星
mynamelj
2006-07-11
打赏
举报
回复
不懂,帮顶!
ringphone
2006-07-11
打赏
举报
回复
重帖一遍
0x21F9是图象控制扩展,应该把解码出的一幅图象加入到图象序列列表中,绘制动画时根据控制扩展的设置进行绘制。
设lpGifData为读入的图象文件数据,检测到0x21F9,lpGifData移到下一字节:
if(*lpGifData == 0x21)
{
lpGifData++;
if(*lpGifData == 0xF9)
{
BYTE docase;
BOOL trans;
WORD delay;
int trans_index;
lpGifData+=2;
docase = (BYTE)(((*lpGifData)>>2)&0x07);
trans=(*lpGifData)&1;
lpGifData++;
delay=*(WORD*)lpGifData;
lpGifData+=2;
if(trans)
trans_index=(int)*lpGifData*3+2;
}
}
根据解码出的值,如果trans_index有值,需要给解码出的这幅图象设置透明色,如果该图象有自己的调色板,trans_index为该调色板
的索引颜色,否则采用全局调色板。delay*10为该图象的显示时间(ms),主要是docase的值决定了该幅图象的绘制方式:
0,1:保持图象,绘制动画GIF应该先根据图象创建一幅内存图象,动画序列中的图象都先画到内存图象然后再显示。0,1值表示将当前的图象绘制到内存图象,其实一般动画GIF中都会有设定背景图象的docase为0或1,当前的图象绘制到内存图象,如果该图象是背景其实就是把背景图象恢复了。
2:恢复成背景色,以背景色填充整幅图象
3:恢复前一图象,即送显。
ringphone
2006-07-11
打赏
举报
回复
0x21F9是图象控制扩展,应该把解码出的一幅图象加入到图象序列列表中,绘制动画时根据控制扩展的设置进行绘制。
设lpGifData为读入的图象文件数据,检测到0x21F9,lpGifData移到下一字节:
if(*lpGifData == 0x21)
{
lpGifData++;
if(*lpGifData == 0xF9)
{
BYTE docase;
BOOL trans;
WORD delay;
int trans_index;
lpGifData+=2;
docase = (BYTE)(((*lpGifData)>>2)&0x07);
if(处理方式 == 0x3)
需要绘制背景图象
trans=(*lpGifData)&1;
lpGifData++;
delay=*(WORD*)lpGifData;
lpGifData+=2;
if(trans)
trans_index=(int)*lpGifData*3+2;
}
}
根据解码出的值,如果trans_index有值,需要给解码出的这幅图象设置透明色,如果该图象有自己的调色板,trans_index为该调色板
的索引颜色,否则采用全局调色板。delay*10为该图象的显示时间(ms),主要是docase的值决定了该幅图象的绘制方式:
0,1:保持图象,绘制动画GIF应该先根据图象创建一幅内存图象,动画序列中的图象都先画到内存图象然后再显示。0,1值表示将当前的图象绘制到内存图象,其实一般动画GIF中都会有设定背景图象的docase为0或1,当前的图象绘制到内存图象,如果该图象是背景其实就是把背景图象恢复了。
2:恢复成背景色,以背景色填充整幅图象
3:恢复前一图象,即送显。
anothervip
2006-07-11
打赏
举报
回复
"http://www.vckbase.com/document/viewdoc/?id=1535" 谢谢 allenhiman(9Ft) 和各位帮顶的朋友。
我目前可以显示GIF动画,但是动画中各个图片叠加是不知道该怎么做,比如这个帖子最上面的广告,“1000多页的业务需求”,图片中没有定义透明色,但是叠加的时候有透明效果(书是一幅幅叠加上去的)。
另外,有的图片会出现倾斜扭曲,为什么会这样啊
有用标准C实现的吗?
mynamelj
2006-07-11
打赏
举报
回复
我是不懂,我也不是为分而顶
allenhiman
2006-07-11
打赏
举报
回复
http://www.vckbase.com/document/viewdoc/?id=1535
截图工具 轻松自如的选择需要的图片
截图工具 轻松自如的选择需要的图片 细到每一个按钮都可以轻松截取
apache不能
解析
php
文件
_Apache中.htaccess
文件
利用的总结与新思路拓展
Apache调用
解析
器的三种方式在普遍使用的LAMP架构中,Apache与PHP之间的交互,有三种常见的方式。第一种是最通用最常见的Module方式,即在httpd.conf中使用LoadModule的方式,将php的dll或者so
文件
加载到apache当中。还有两种是CGI方式和FastCGI方式。其实后者用的越来越广泛了。一般PHP-FPM也是与FastCGI进行配合使用的。可以参考...
怎样修改
文件
头信息
这两天在写DES
文件
加密的代码,其中遇到3个
问题
,
请教
一下: 1:我需要为已经加密的
文件
的扩展名改为“.des”(譬如原来为abc.jpg改为abc.des),在解密后又要改会原来的格式,这是
问题
来了:我怎么知道这个
文件
在加密前是什么格式的
文件
?请问,有什么办法可以在没有扩展名的情况下知道
文件
类型。我想可以在
文件
的头信息中记录
文件
原来的扩展名,但请问,C#怎样对
文件
的头
文件
信息进行访问? 2:我希...
从MTK的BIN
文件
里提取图片资源
MTK手机软件是一个二进制的BIN
文件
,最近一段时间来,很多人都在动BIN
文件
的脑筋,希望通过直接修改BIN达到修改软件的目的.有人写了资源提取工具,有人写了直接修改手机语言的工具,总之MTK平台售后服务工具层出不穷.于是常常被别人
请教
这些工具是怎么实现的.这倒让我有些为难了,简单一些来说,他们都是靠分析BIN得操作的.不过面对一大堆混乱的字符,要分析他们可不是一件容易的事.一般来说,由于二进制文
discuz目录
文件
Discuz! X2.0主要的程序
文件
功能: 粗体表示这个
文件
比较重要,除非你非常了解其功能,否则修改错误会导致全站瘫痪;斜体表示这个
文件
已被加密,一般情况下修改没有意义;下划线表示这个
文件
一般99.99%的修改是用不上的,了解即可 绿色的是函数库
文件
,蓝色的是常量调用
文件
,红色的是系统全局核心
文件
下面开始了,请看你的upload目录里面的
文件
,表述的格式依次为
文件
名,功能描述等等 先从根目
界面
15,980
社区成员
115,867
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章