SetDIBitsToDevice

来源:互联网 发布:电动牙刷知乎 编辑:程序博客网 时间:2024/06/04 19:01
#define SHOW_NORMAL1#define SHOW_CENTER2#define SHOW_STRETCH3#define SHOW_ISOSTRETCH4int  ShowDib (HDC hdc, BITMAPFILEHEADER * pbmfh, int cxClient, int cyClient, int wShow){if(NULL==pbmfh)return 0;return ShowDib(hdc,(BITMAPINFO*)(pbmfh+1),(BYTE*)pbmfh+(pbmfh->bfOffBits),cxClient,cyClient,wShow);}int ShowDib (HDC hdc, BITMAPINFO * pbmi, BYTE * pBits, int cxClient, int cyClient, int wShow){if(NULL==hdc || NULL==pbmi || NULL==pBits || wShow<SHOW_NORMAL || wShow>SHOW_ISOSTRETCH)return 0;int cxDib, cyDib ;int BltMode, ret ;if (pbmi->bmiHeader.biSize == sizeof (BITMAPCOREHEADER)){cxDib = ((BITMAPCOREHEADER *) pbmi)->bcWidth ;cyDib = ((BITMAPCOREHEADER *) pbmi)->bcHeight ;}else{cxDib =      pbmi->bmiHeader.biWidth ;cyDib = abs (pbmi->bmiHeader.biHeight) ;}switch (wShow){case SHOW_NORMAL:return SetDIBitsToDevice (hdc, 0, 0, cxDib, cyDib, 0, 0, 0, cyDib, pBits, pbmi, DIB_RGB_COLORS) ;case SHOW_CENTER:return SetDIBitsToDevice (hdc, (cxClient - cxDib) / 2,(cyClient - cyDib) / 2, cxDib, cyDib, 0, 0, 0, cyDib, pBits, pbmi, DIB_RGB_COLORS) ;case SHOW_STRETCH:BltMode=SetStretchBltMode (hdc, COLORONCOLOR) ;ret=StretchDIBits (hdc, 0, 0, cxClient, cyClient, 0, 0, cxDib, cyDib,pBits, pbmi, DIB_RGB_COLORS, SRCCOPY) ;SetStretchBltMode (hdc, BltMode) ;return ret;case SHOW_ISOSTRETCH:BltMode=SetStretchBltMode (hdc, COLORONCOLOR) ;if(cxDib*cyClient > cyDib*cxClient)//图更宽ret=StretchDIBits (hdc,0,(cyClient-(int)((float)cyDib/(float)cxDib*(float)cxClient))/2,cxClient, (int)((float)cyDib/(float)cxDib*(float)cxClient) , 0, 0, cxDib, cyDib, pBits, pbmi, DIB_RGB_COLORS, SRCCOPY) ;elseret=StretchDIBits (hdc,(cxClient-(int)((float)cxDib/(float)cyDib*(float)cyClient))/2, 0,(int)((float)cxDib/(float)cyDib*(float)cyClient), cyClient,0, 0, cxDib, cyDib, pBits, pbmi, DIB_RGB_COLORS, SRCCOPY) ;SetStretchBltMode (hdc, BltMode) ;return ret;}return 0 ;}ShowDib (hdc, (BITMAPFILEHEADER * )buf3, 640, 480, SHOW_NORMAL);