最近在用MFC的单文档做一个GIF文件,在内存位图那里遇到了一些问题我的思路是这样的:1。在内存DC中放进一个空白位图
memBitmap[ImgNum].CreateCompatibleBitmap(pDC,dib.Width(),dib.Height());
pDC->SelectObject(&memBitmap[ImgNum]);2。
当将一个DIB用StretchDIBits()函数画到屏幕上的时候
StretchDIBits(pDC->GetSafeHdc(),0,0,rc.Width(),rc.Height(),0,0,dib.Width(),
dib.Height(),dib.m_pBits,dib.m_pBMI,DIB_RGB_COLORS,SRCCOPY); 那么memBitmap[ImgNum]就可以获得DIB的数据内容,即像素3。然后将每一幅的位图加到GIF中 for( i=0; i<ImgNum; i++)
{
BYTE *palette = NULL;
BYTE *pData = NULL; if(GetData(memBitmap[i],&palette,&pData,&bitsPixel,&nWidth,&nHeight) == FALSE)
{
return ;
}
//加入其它图片
AddImageToGIF(file,pData,palette,nWidth,nHeight,bitsPixel,10,-1);
delete []pData;
delete []palette;
}但是到最后生成的GIF图片是空的,为什么呢,难道说我用memBitmap[ImgNum]获得DIB的数据内容的方法不对?
memBitmap[ImgNum].CreateCompatibleBitmap(pDC,dib.Width(),dib.Height());
pDC->SelectObject(&memBitmap[ImgNum]);2。
当将一个DIB用StretchDIBits()函数画到屏幕上的时候
StretchDIBits(pDC->GetSafeHdc(),0,0,rc.Width(),rc.Height(),0,0,dib.Width(),
dib.Height(),dib.m_pBits,dib.m_pBMI,DIB_RGB_COLORS,SRCCOPY); 那么memBitmap[ImgNum]就可以获得DIB的数据内容,即像素3。然后将每一幅的位图加到GIF中 for( i=0; i<ImgNum; i++)
{
BYTE *palette = NULL;
BYTE *pData = NULL; if(GetData(memBitmap[i],&palette,&pData,&bitsPixel,&nWidth,&nHeight) == FALSE)
{
return ;
}
//加入其它图片
AddImageToGIF(file,pData,palette,nWidth,nHeight,bitsPixel,10,-1);
delete []pData;
delete []palette;
}但是到最后生成的GIF图片是空的,为什么呢,难道说我用memBitmap[ImgNum]获得DIB的数据内容的方法不对?
解决方案 »
- VC实现向ClistView类插入图标
- 老问题:设置CListCtrl行高
- 完成端口完整服务端客户端源码(高手作品),但是有问题需要指点?
- 一个关于链表的常识性问题
- 对类厂的理解?
- delphi,vc++,vb,c++builder选那个?
- ********——————******* 简单问题求教!马上给分!
- CoCreateIntance 调用返回值失败可能是什么问题???(组件已经注册)
- 急,请教一问题,关于调用IStream中 Write函数报错
- 大家觉得中国的软件业不如印度的原因是什么?是没有人才吗?还是程序员待遇不够?
- CStatic seticon问题
- c++ 中如何引入c#功能模块
建议看看gif格式
AddImageToGIF很奥妙。。楼主详细描述下
我只是想问
1。在内存DC中放进一个空白位图
memBitmap[ImgNum].CreateCompatibleBitmap(pDC,dib.Width(),dib.Height());
pDC->SelectObject(&memBitmap[ImgNum]);2。
当将一个DIB用StretchDIBits()函数画到屏幕上的时候
StretchDIBits(pDC->GetSafeHdc(),0,0,rc.Width(),rc.Height(),0,0,dib.Width(),
dib.Height(),dib.m_pBits,dib.m_pBMI,DIB_RGB_COLORS,SRCCOPY); 那么memBitmap[ImgNum]就可以获得DIB的数据内容,即像素我的这个思路对吗?
pDC->SelectObject(&memBitmap[ImgNum]);这个pDC貌似是内存DC吧,不要用内存DC来做CreateCompatibleBitmap()第一个参数,你应该用GetDC()之类的.
否则结果可能并不是你想要的..create了个1Bit的bmp.