首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

位图 有关问题

2012-08-31 
位图 问题主要代码如下 :第一步 循环从avi文件截取位图 并把位图信息都把放到一个list容器中while (1){//

位图 问题
主要代码如下 :
第一步 循环从avi文件截取位图 并把位图信息都把放到一个list容器中
while (1)
{
//读取第i帧 并保存到pDate中

hr = AVIStreamRead(pavi, i, 1, pData, cX * cy * 3, &i, NULL);

if (hr == 0)
{
CBitmap *bitTemp = new CBitmap;
bitTemp->CreateCompatibleBitmap(pDC, cX, cy);
bitTemp->SetBitmapBits(cX * cy * 3, pData);
listhbitmap.push_back((HBITMAP)bitTemp->GetSafeHandle());

}
else//读取到最后一帧或出错就退出
{
return ;
}
}

第二步:主要是把得到的avi位图选到一个内存设备
  CDC *pdc = GetDC();
//创建一个和屏幕兼容的内存dc
CDC dcMem;
dcMem.CreateCompatibleDC(pdc);

  /..................../

可是执行下面的代码却得到的位图信息显示的都是乱乱的, 有什么办法解决吗 难道真的要转成32位位图才可以选到内存设备环境吗? 求高人解答。。。。
 ::SelectObject(dcMem.GetSafeHdc(), (HBITMAP)*it);
 pdc->StretchBlt(0,0,1024,1024, &dcMem,0,0,1024, 1024, SRCCOPY);


[解决办法]
不是啊

C/C++ code
BOOL CMyView::ShowBitmap(CString str){        CBitmap *bitmap;        BITMAP  pBmpInfo;        HBITMAP bmp =(HBITMAP)::LoadImage(AfxGetInstanceHandle(),str,IMAGE_BITMAP,0, 0, LR_CREATEDIBSECTION | LR_LOADFROMFILE);                if(bmp==NULL)        {            MessageBox("LoadImage Error !");            return FALSE;        }        bitmap=CBitmap::FromHandle(bmp);        bitmap->GetBitmap(&pBmpInfo);        CDC mem;        CDC *pDC=GetDC();        if(!mem.CreateCompatibleDC(pDC))        {            MessageBox("CreateCompatibleDC Error !");            return FALSE;        }                if(! mem.SelectObject(bitmap))        {            MessageBox("SelectObject Error !");            return FALSE;        }        CRect rect;        GetClientRect(&rect);//         int err = pDC->BitBlt(0,0,pBmpInfo.bmWidth,pBmpInfo.bmHeight,&mem,0,0,SRCCOPY);//         int err = pDC->StretchBlt(0,0,pBmpInfo.bmWidth,pBmpInfo.bmHeight,&mem,0,0,rect.Width(),rect.Height(),SRCCOPY);         int err = pDC->StretchBlt(0,0,pBmpInfo.bmWidth,pBmpInfo.bmHeight,&mem,0,0,pBmpInfo.bmWidth,pBmpInfo.bmHeight,SRCCOPY);         if(err==0)        {            MessageBox("BitBlt Error !");            return FALSE;        }        pDC->DeleteDC();        mem.DeleteDC();        return TRUE;} 

热点排行