页面

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);
 }

2011年2月11日星期五

“0x3000”: 此字符不允许在标识符中使用

0x3000是汉语的空格,也就是全角空格,相当于一个汉字,但你又看不见它。

像逗号,有半角(,)和全角(,)之分的,其实空格也有。
0x3000是全角的空格,0x20是半角的空格。
而这次遇到的问题就有更复杂一些,是定义的宏中出现的全角空格
#define  DIB_MARKER ((WORD)('M'<<8) | 'B')