///////////////////////////////////////////////////////////// void CDIBView::OnInitialUpdate() { CscrollView::OnInitalUpdate(); CDIBDoc *pDoc=GetDocument(); If(pDoc->m_hDIB==NULL)//如果位圖數(shù)據(jù)為空,設(shè)置m_sizeDoc的默認(rèn)尺寸; pDoc->m_sizeDoc.cx=pDoc->m_sizeDoc.cy=100; SetScrollSizes(MM_TEXT,pDoc-> m_sizeDoc); } ///////////////////////////////////////////////////////////// void CDIBView::OnDraw(CDC *pDC) { BITMAPINFOHEADER *lpDIBHdr;//位圖信息頭結(jié)構(gòu)指針; BYTE *lpDIBBits;//指向位圖像素灰度值的指針; BOOL bSuccess=FALSE; CPalette*OldPal=NULL;//調(diào)色板指針; HDC hDC=pDC->GetSafeHdc();//獲取當(dāng)前設(shè)備上下文的句柄; CDIBDoc *pDoc=GetDocument();//獲取活動(dòng)文檔的指針; If(pDoc->m_hDIB ==NULL) {//判斷圖像數(shù)據(jù)是否為空; AfxMessageBox("圖像數(shù)據(jù)不能為空,請(qǐng)首先讀取圖像數(shù)據(jù)!"); return; } lpDIBHdr=( BITMAPINFOHEADER *)GlobalLock(pDoc->m_hDIB);//得到圖像的位圖頭信息 lpDIBBits=lpDIBHdr+sizeof(BITMAPINFOHEADER)+256*sizeof(RGBQUAD);//獲取保存圖像像素值的緩沖區(qū)的指針; if(pDoc-> m_palDIB) {//如果存在調(diào)色板信息,實(shí)現(xiàn)邏輯調(diào)色板; OldPal=pDC-> SelectPalette(pDoc-> m_palDIB,TRUE); PDC->RealizePalette(); } else { AfxMessageBox("圖像的調(diào)色板數(shù)據(jù)不能為空,請(qǐng)首先讀取調(diào)色板信息!"); return ; } SetStretchBltMode(hDC,COLORONCOLOR); //顯示圖像 BSuccess=StretchDIBBits(hDC,0,0,pDoc-> m_sizeDoc.cx, pDoc-> m_sizeDoc.cy, 0, pDoc-> m_sizeDoc.cy,0, pDoc-> m_sizeDoc.cy, lpDIBBits,(LPBITMAPINFO)lpDIBHdr, DIB_RGB_COLORS, SRCCOPY); GlobalUnlock(pDoc->m_hDIB); If(OldPal)//恢復(fù)調(diào)色板; PDC->SelectPalette(OldPal,FALSE); retrun; } |
聯(lián)系客服