最近在用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的数据内容的方法不对?

解决方案 »

  1.   

    要按照gif格式写入数据文件头信息,还要压缩,而不是简单地吧每幅图片的数据拷贝过去
    建议看看gif格式
      

  2.   

    楼主用啥类库啊?
    AddImageToGIF很奥妙。。楼主详细描述下
      

  3.   

    我找到的貌似不是一个类库吧,是一个程序“生成GIF文字的”,那些压缩什么的都在AddImageToGIF()中实现了,如果有人对这个程序有兴趣的话上网找找吧,我好像是在CSDN的下载资源里面找到的。
    我只是想问
    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的数据内容,即像素我的这个思路对吗?
      

  4.   

    嗯,我也觉得思路是对的,但是调试的时候发现,memBitmap没有获得位图的数据。求解释
      

  5.   

    memBitmap[ImgNum].CreateCompatibleBitmap(pDC,dib.Width(),dib.Height());
    pDC->SelectObject(&memBitmap[ImgNum]);这个pDC貌似是内存DC吧,不要用内存DC来做CreateCompatibleBitmap()第一个参数,你应该用GetDC()之类的.
    否则结果可能并不是你想要的..create了个1Bit的bmp.
      

  6.   

    但是楼上,据我的调试结果看来,memBitmap[ImgNum]是32位的,只不过是空白的而已
      

  7.   

    9楼,我的pDC不是内存DC,是单文档中view类里面OnDraw()里面的pDC