SetDIBitsToDevice

#define SHOW_NORMAL			1
#define SHOW_CENTER			2
#define SHOW_STRETCH		3
#define SHOW_ISOSTRETCH		4
int  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) ;
		else
			ret=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);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值