正在阅读:vc实现BMP位图文件结构及平滑缩放vc实现BMP位图文件结构及平滑缩放

2005-06-22 10:14 出处: 作者:unknown 责任编辑:moningfeng
4. 在CViewBimap类图形显示函数OnPaint中添加GraphicDraw()

voidCViewBitmap::OnPaint() { CPaintDC dc(this); // device context for painting GraphicDraw( ); } voidCViewBitmap::GraphicDraw( void ) { CClientDC dc(this); // device context for painting BITMAPFILEHEADER *pBitmapFileHeader; ULONG bfoffBits= 0; CPoint Wid;   // 图形文件名有效 (=0 BMP) if( mBitmapFileType < ID_BITMAP_BMP ) return;   // 图形文件名有效 (=0 BMP)   // 准备显示真彩位图 pBitmapFileHeader= (BITMAPFILEHEADER *) mpBitsSrc; bfoffBits= pBitmapFileHeader->bfOffBits;   // 使用普通函数显示位图 if( m_hDrawDib == NULL || mDispMethod == 0) { HBITMAP hBitmap=::CreateDIBitmap(dc.m_hDC, mpBitmapInfo, CBM_INIT, mpBitsSrc+bfoffBits, (LPBITMAPINFO) mpBitmapInfo,DIB_RGB_COLORS);   // 建立位图 HDC hMemDC=::CreateCompatibleDC(dc.m_hDC);// 建立内存 HBITMAP hBitmapOld= SelectBitmap(hMemDC, hBitmap); // 选择对象   // 成员CRect mDispR用于指示图形显示区域的大小.   // 成员CPoint mPos用于指示图形显示起始位置坐标. if( mPos.x > (mpBitmapInfo- >biWidth - mDispR.Width() )) mPos.x= mpBitmapInfo->biWidth - mDispR.Width() ; if( mPos.y > (mpBitmapInfo- >biHeight- mDispR.Height())) mPos.y= mpBitmapInfo- >biHeight- mDispR.Height(); if( mPos.x < 0 ) mPos.x= 0; if( mPos.y < 0 ) mPos.y= 0; if( mFullViewTog == 0) {   // 显示真彩位图 ::BitBlt(dc.m_hDC,0,0, mDispR.Width(), mDispR.Height(), hMemDC,mPos.x,mPos.y, SRCCOPY); } else { ::StretchBlt(dc.m_hDC,0,0, mDispR.Width(), mDispR.Height(), hMemDC,0,0, mpBitmapInfo- >biWidth, mpBitmapInfo- >biHeight, SRCCOPY); }   // 结束显示真彩位图 ::DeleteObject(SelectObject(hMemDC,hBitmapOld));   // 删 除 位 图 } else {   // 使用视频函数显示位图 if( mPos.x > (mpBitmapInfo- >biWidth - mDispR.Width() )) mPos.x= mpBitmapInfo- >biWidth - mDispR.Width() ; if( mPos.y > (mpBitmapInfo- >biHeight- mDispR.Height())) mPos.y= mpBitmapInfo- >biHeight- mDispR.Height(); if( mPos.x < 0 ) mPos.x= 0; if( mPos.y < 0 ) mPos.y= 0;   // 显示真彩位图 DrawDibRealize( m_hDrawDib, dc.GetSafeHdc(), TRUE); if( mFullViewTog == 0) { Wid.x= mDispR.Width(); Wid.y= mDispR.Height();   // 1:1 显示时, 不能大于图形大小 if( Wid.x > mpBitmapInfo- >biWidth ) Wid.x = mpBitmapInfo- >biWidth; if( Wid.y > mpBitmapInfo- >biHeight) Wid.y = mpBitmapInfo- >biHeight; DrawDibDraw( m_hDrawDib, dc.GetSafeHdc() , 0, 0, Wid.x, Wid.y, mpBitmapInfo, (LPVOID) (mpBitsSrc+bfoffBits), mPos.x, mPos.y, Wid.x, Wid.y, DDF_BACKGROUNDPAL); } else { DrawDibDraw( m_hDrawDib, dc.GetSafeHdc(), 0, 0, mDispR.Width(), mDispR.Height(), mpBitmapInfo, (LPVOID) (mpBitsSrc+bfoffBits), 0, 0, mpBitmapInfo- >biWidth, mpBitmapInfo- >biHeight, DDF_BACKGROUNDPAL); } } return; }

键盘也能翻页,试试“← →”键

关注我们

最新资讯离线随时看 聊天吐槽赢奖品