急需解决C# PNG图片的重叠透明问题

///& lt;总结& gt

///根据图片计算GraphicsPath路径。

///& lt;/summary & gt;

///& lt;param name = " img " & gtGif或png图片

///& lt;returns & gt图片不透明区域的路径

公共不安全静态GraphicsPath子GraphicsPath(Image img)

{

if (img == null)返回null;

//为我们的位图路径计算建立GraphicsPath。

graphics path g = new graphics path(FillMode。候补);

Bitmap bitmap =新位图(img);

int width =位图。宽度;

int height =位图。身高;

BitmapData bmData =位图。LockBits(新矩形(0,0,width,height),ImageLockMode。读写,像素格式。format 24 bpprgb);

byte* p = (byte*)bmData。Scan0

int offset = bmData。步幅宽度* 3;

int p0,p1,p2;//记录左上角0,0坐标的颜色值。

P0 = p[0];

p 1 = p[1];

p2 = p[2];

int start =-1;

//线坐标(Y列)

for(int Y = 0;Y & lt身高;Y++)

{

//行坐标(X行)

for(int X = 0;X & lt宽度;X++)

{

if(start = =-1 & amp;& amp(p[0]!= p0 || p[1]!= p1 || p[2]!= p2)) //如果前一个点不是不透明不透明。

{

start = X;//记录这一点

}

else if(start & gt;-1 & amp;& amp(p[0]= = P0 & amp;& ampp[1] == p1。& ampP[2] == p2)) //如果前一点不透明,透明。

{

g.AddRectangle(新矩形(start,Y,X - start,1));//将上一个矩形添加到

start =-1;

}

if(X = = width-1 & amp;& amp开始& gt-1) //如果前一个点不透明,最后一个点。

{

g.AddRectangle(新矩形(start,Y,X - start + 1,1));//将上一个矩形添加到

start =-1;

}

//if (p[0]!= p0 || p[1]!= p1 || p[2]!= p2)

// g.AddRectangle(新矩形(X,Y,1,1));

p+= 3;//下一个内存地址

}

p +=偏移量;

}

位图。解锁位(bmData);

位图。dispose();

//返回计算出的不透明图像路径。

返回g;

}

上述方法

下面的调用,如果你的控件是pictureBox1。

graphics path g = subgraphics path(picturebox 1。图片);

if (g == null)返回;

pictureBox1。Region =新区域(g);

PS,使用这段代码时,需要选择项目属性->;生成->;选中“允许不安全的代码”

不知道如何再和我打招呼。