StretchBlt()与AlphaBlend()函数

还是做个笔记吧,今天要用的时候,时间太久,忘记了怎么写了,又不想翻百度/Google,最后就在硬盘里翻了好一会。

英文啊,英文, 啥时候能看英文比中文还顺畅。

	BLENDFUNCTION blend;
	blend.AlphaFormat=0;			//字段AlphaFormat有两个选择:0表示源位图中的所有像素使用同样的常量alpha值,
									//即SourceConstantAlpha字段中的值,AC_SRC_ALPHA表示每个像素有各自的alpha通道。
	blend.BlendFlags=0;				//BlendFalgs保留字段,必须是0
	blend.BlendOp=AC_SRC_OVER;		//BlendOp字段指明了源混合操作,但只支持AC_SRC_OVER,即根据源alpha值把源图像叠加到目标图像上
	blend.SourceConstantAlpha=50;	//0到255,0表示完全透明,255表示完全不透明
	if(!AlphaBlend(hm_DC0,100,100,200,bitmap.bmHeight,DirectDC,0,0,bitmap.bmWidth,bitmap.bmHeight,blend))
	{
		MessageBox(L"Faild",L"AlphaBlend",MB_OK);
	}
	CString str	=L"//USER//bitblt//book.bmp/0";
	CDC  dcMem2;
	CBitmap bmp2;
	dcMem2.CreateCompatibleDC(&dc);
	bmp2.m_hObject=SHLoadDIBitmap(str);
	dcMem2.SelectObject(&bmp2);		
	//dc.BitBlt(100,100,121,129,&dcMem2,0,0,SRCCOPY);
	dc.StretchBlt(200,200, 121,-129,&dcMem2,0,0,121,129,SRCCOPY);
	dc.StretchBlt(200,200,-121,  30,&dcMem2,0,0,121,129,SRCCOPY);
	dc.StretchBlt(200,200,-121,-129,&dcMem2,0,0,121,129,SRCCOPY);
	dc.StretchBlt(200,200, 121,  30,&dcMem2,0,0,121,129,SRCCOPY);
	dcMem2.DeleteDC();
	bmp2.DeleteObject();
/*
	StretchBlt()函数支持图像的镜像显示,如果将目标区域的高度或宽度取为负值,就可以实现图像的镜像显示。
	pDC->StretchBlt(100, 100,  48,  48, &BackDC, 0, 0, 48, 48, SRCCOPY);	// 显示正常图像
	pDC->StretchBlt(100, 100, -48,  48, &BackDC, 0, 0, 48, 48, SRCCOPY);	// 显示水平对称图像
	pDC->StretchBlt(100, 100,  48, -48, &BackDC, 0, 0, 48, 48, SRCCOPY);	// 显示垂直对称图像
	pDC->StretchBlt(100, 100, -48, -48, &BackDC, 0, 0, 48, 48, SRCCOPY);	// 显示中心对称图像
	*/

  


原文地址:https://www.cnblogs.com/ezhong/p/2171458.html