MFC透明控件

void GetBKimageVisibleRgn(CString filepath, int width, int height, CRgn& Rgn)
{
	//获取图片宽高
	Bitmap *pimage = Bitmap::FromFile(filepath);
	pimage->SetResolution(width, height);

	int imageW = pimage->GetWidth();
	int imageH = pimage->GetHeight();
	Rgn.CreateRectRgn(0, 0, imageW, imageH);

	COLORREF color;
	for (int i = 0; i < imageH; i++)//行循环从上到下行
	{
		for (int j = 0; j < imageW; j++)//列循环从左到右
		{
			Color cl;
			pimage->GetPixel(j, i, &cl);
			int alp = (int)cl.GetAlpha();//获取j,i点的ALP值
			if (alp == 0)
			{
				CRgn tempPixRgn;//象素点区域
				tempPixRgn.CreateRectRgn(j, i, j + 1, i + 1);
				Rgn.CombineRgn(&Rgn, &tempPixRgn, RGN_XOR);//重叠区域抛弃叠加
				tempPixRgn.DeleteObject();
			}
		}
	}
}

以上代码可以根据图片获取Rgn,然后通过SetWindowRgn实现图片的区域为不透明的部分。

猜你喜欢

转载自blog.csdn.net/youyudexiaowangzi/article/details/83753926