火急--GIF动画求助!!! (可在线等待)

jluhs 2003-08-21 09:16:13
我现在需要在应用程序中显示gif动画,但是这种显示是不能利用IPicture、Animate类或其他控件,该如何做为好啊?我的环境是C、C++(VC6.0),GIF动画的原理是什么啊?
恳请各位兄弟姐妹们鼎立相助,多谢!!
...全文
82 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
honglunxu 2003-08-22
  • 打赏
  • 举报
回复
mark
mfcstarter 2003-08-22
  • 打赏
  • 举报
回复
我有个CPictureEx类,可以播放gif文件,要的给我消息。
lonkil 2003-08-22
  • 打赏
  • 举报
回复
mark
以后用到了,再看!
  • 打赏
  • 举报
回复
// CBeexb_gifView message handlers
typedef struct gifImage{
WORD lWidth;
WORD lHeight;
WORD width;
WORD height;
struct flag{
BYTE d:3;
BYTE c:1;
BYTE b:3;
BYTE a:1;
}Flag;
}GifImage,*PGifImage;
#include <math.h>

static UINT GifThread(LPVOID gifDC)
{
CDC* pdc = (CDC*)gifDC;
HINSTANCE handle = ::AfxGetResourceHandle();
HRSRC hrsrc = ::FindResource(handle,MAKEINTRESOURCE(IDR_IMAGE2),"IMAGE");
DWORD word = ::SizeofResource(handle,hrsrc);
BYTE* lpBy = (BYTE*)LoadResource(handle,hrsrc);
BYTE* pByte[20];
DWORD nu[20];
int num = 0;
DWORD firstLocation = 0;
for(DWORD j=0;j<word;j++)
{
if(lpBy[j]==0x2c)
{
if(lpBy[j-1]==0x00)
{

if(num==0)
{
firstLocation = j;
}
PGifImage nowImage = (PGifImage)&lpBy[j+1];
if(nowImage->Flag.a==0)
{
DWORD number = 1+sizeof(GifImage);
while(lpBy[j+number]!=0)
{
number = number+(DWORD)lpBy[j+number]+1;
}
number++;
pByte[num] = new BYTE[number];
for(DWORD n=0;n<number;n++)
{
*(BYTE*)(pByte[num]+n) = lpBy[j+n];
}
nu[num] = number;
j = j+number-1;
num++;
}
else
{
int number = 1+sizeof(GifImage)+1+3*(int)floor(pow(2,nowImage->Flag.d));
while(lpBy[j+number]!=0)
{
number = number+lpBy[j+number];
}
pByte[num] = new BYTE[number];
for(int n=0;n<number;n++)
{
*(BYTE*)(pByte[num]+n) = lpBy[j+n];
}
nu[num] = number;
j = j+number-1;
num++;
}
}
}
}
int i = 1;
while(i)
{
for(int m=0;m<num;m++)
{
CBrush brush(RGB(255,255,255));
pdc->FillRect(CRect(0,0,500,500),&brush);
DWORD DDD;
VirtualProtect(lpBy,word,PAGE_READWRITE,&DDD);
for(DWORD n=0;n<nu[m];n++)
{
lpBy[firstLocation+n] = *(BYTE*)(pByte[m]+n);
}
VirtualProtect(lpBy,word,DDD,NULL);



CMemFile file(lpBy,word);
CArchive ar(&file,CArchive::load|CArchive::bNoFlushOnDelete);
CArchiveStream arcstream(&ar);
CComQIPtr<IPicture> m_picture;
HRESULT hr = OleLoadPicture((LPSTREAM)&arcstream,0,false,IID_IPicture,(void**)&m_picture);
long a,b;
m_picture->get_Width(&a);
m_picture->get_Height(&b);
CSize sz(a,b);
pdc->HIMETRICtoDP(&sz);
CRect rect;
m_picture->Render(*pdc,0,0,sz.cx,sz.cy,0,b,a,-b,&rect);
Sleep(1000);
}
}
return 1;
}

void CBeexb_gifView::OnShowGif()
{
static BOOL bIsRunning = FALSE;
if(!bIsRunning)
{
CDC* pdc = GetDC();
m_gifDC = new CDC;
m_gifDC->Attach(pdc->GetSafeHdc());
AfxBeginThread(GifThread,(LPVOID)m_gifDC);
bIsRunning = TRUE;
}
}
sevenking 2003-08-22
  • 打赏
  • 举报
回复
好像只能象bab说的 那样做
fanzai 2003-08-21
  • 打赏
  • 举报
回复
gz
wangbab 2003-08-21
  • 打赏
  • 举报
回复
我以前用过,不过是个笨办法。用photoshop包gif的每桢画面截取下来,通过Timer循环播放这些画面。占用内存较多。
我也想知道能直接播放gif的简便方法。
canoe_eyes 2003-08-21
  • 打赏
  • 举报
回复
up
jluhs 2003-08-21
  • 打赏
  • 举报
回复
还有没有其他建议啊,各位?GIF动画各帧之间的间隔时间该如何读取啊?
Node-RED是工业网物联网的重要组成部分,我最开始接触Node-RED,也算是一个偶然的机会吧,上班后领导安排我的第一个任务就是调研一下Node-RED,我之后上网查了一下,那个时候网上相对于Node-RED的资料也比较少,只知道它是IBM公司的一个开源项目。直到最近,发现许多大公司的产品都支持Node-RED,比如西门子公司的IoT2000,研华公司的WISE PaaS 网关,美国OPTO 22等设备中都安装了Node-RED,表明它在工业物联网和控制中已经广泛应用了。 那么工业物联网为什么要用它?它又处于工业物联网那个层次?它具有哪些特性?它帮助物联网解决了什么问题?为什么说它是柔性动态可重构的解决方案呢? ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 本门课程,老师将带领你从Node-RED的发展,工业物联网定位开始讲解,并带领着大家进行手把手安装Node-RED,实际操作演练Node-RED,并搭建一个物联网小平台,给大家带来更好的学习效果。  ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 为了能够让小伙伴们快速了解本门课程的结构,本门课程从以下几个方面展开:Node-RED入门Node-RED安装与配置Node-RED教学实战Node-RED的优势与不足Node-RED能为我们带来什么Node-RED总结与展望

16,465

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧