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实现图片的区域为不透明的部分。