页面

2011年3月3日星期四

StretchDiBits()显示24位位图失真(颜色不对,位置偏移问题)

这个问题困扰了我很久很久了,终于发现问题所在,原来lpSrcStartBits设置有问题,只要用
lpSrcStartBits = lpDib + lpbmi->bmiHeader.biSize;。就可解决
HGLOBAL hDIB = pDoc->GetHObject();
 if(pDoc->m_hDIB != NULL)
 {
  LPSTR lpDib = (LPSTR)::GlobalLock(hDIB);
  LPBITMAPINFO lpbmi = (LPBITMAPINFO)lpDib;            // 获取指针
  LPSTR lpSrcStartBits=lpDib + lpbmi->bmiHeader.biSize;
  /*int i = lpbmi->bmiHeader.biBitCount;
  int i = lpbmi->bmiHeader.biSize;
  CString str;
  str.Format(_T("%d"),i);
  AfxMessageBox(_T(str));*/
  SrcRect.right = pDoc->m_dib.GetWidth(lpDib);
  SrcRect.bottom = pDoc->m_dib.GetHeight(lpDib);
  SetStretchBltMode(pDC->m_hDC,COLORONCOLOR);
  ::StretchDIBits(pDC->GetSafeHdc() , 0 , 0 ,SrcRect.right ,SrcRect.bottom ,0 ,0 ,pDoc->m_dib.GetWidth(lpDib),
   pDoc->m_dib.GetHeight(lpDib), lpSrcStartBits, lpbmi,DIB_RGB_COLORS, SRCCOPY);
 }

没有评论:

发表评论