中易网

【急求解】C# PNG图片重叠透明问题

答案:2  悬赏:80  
解决时间 2021-02-16 22:53
我想做个C#的小游戏,两个PNG图片分别放在两个pictureBox里,但是两个图片重叠时,上层图片对下层是不透明的,只是对背景透明。在网上找了好久也没找到解决方法。
(本人刚学C#,烦请高手详细指导)谢谢
最佳答案
///
/// 根据图片计算GraphicsPath路径
///

/// gif或者png图片
/// 图片不透明区域路径
public unsafe static GraphicsPath subGraphicsPath(Image img)
{
if (img == null) return null;

// 建立GraphicsPath, 给我们的位图路径计算使用
GraphicsPath g = new GraphicsPath( FillMode.Alternate);

Bitmap bitmap = new Bitmap(img);

int width = bitmap.Width;
int height = bitmap.Height;
BitmapData bmData = bitmap.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.ReadWrite,PixelFormat.Format24bppRgb);
byte* p = (byte*)bmData.Scan0;
int offset = bmData.Stride - width * 3;
int p0, p1, p2; // 记录左上角0,0座标的颜色值
p0 = p[0];
p1 = p[1];
p2 = p[2];

int start = -1;
// 行座标 ( Y col )
for (int Y = 0; Y < height; Y++)
{
// 列座标 ( X row )
for (int X = 0; X < width; X++)
{
if (start == -1 && (p[0] != p0 || p[1] != p1 || p[2] != p2)) //如果 之前的点没有不透明 且 不透明
{
start = X; //记录这个点
}
else if (start > -1 && (p[0] == p0 && p[1] == p1 && p[2] == p2)) //如果 之前的点是不透明 且 透明
{
g.AddRectangle(new Rectangle(start, Y, X - start, 1)); //添加之前的矩形到
start = -1;
}

if (X == width - 1 && start > -1) //如果 之前的点是不透明 且 是最后一个点
{
g.AddRectangle(new Rectangle(start, Y, X - start + 1, 1)); //添加之前的矩形到
start = -1;
}
//if (p[0] != p0 || p[1] != p1 || p[2] != p2)
// g.AddRectangle(new Rectangle(X, Y, 1, 1));
p += 3; //下一个内存地址
}
p += offset;
}
bitmap.UnlockBits(bmData);
bitmap.Dispose();
// 返回计算出来的不透明图片路径
return g;
}

上面的方法

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

GraphicsPath g = subGraphicsPath(pictureBox1.Image);
if (g == null) return;
pictureBox1.Region = new Region(g);

PS,用这个代码的时候需要选择项目属性->生成->勾选"允许不安全代码"
不懂再HI我
全部回答
用GDI+重写
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
牛粪菇一年一般可以收获几次的?
求各种 全国英语等级考试五级 pets5 资料 MP3
淄博市临淄区妇幼保健计划生育服务中心我想知
利税总额怎么计算?有哪些数值名称,数值名称在
绵阳一中初升高艺体生报名
邮政速递服务中心怎么去啊,有知道地址的么
阳光充足的英语怎么说?
歇后语竹竿打月亮一挨不上
许嵩新专辑 除《想象之中》其他歌曲名?
泉州市区皮卡车可进入吗
大众途观市区D档和S档那样省油?
苏州吴中区是三国时的东吴嘛?
天翔宝贝在哪里啊,我有事要去这个地方
求天涯明月刀ol安装包......实在太大了....我
烈士陵园(玉伯村)地址在哪,我要去那里办事
推荐资讯
为什么我跟老公同房完,我下阴会瘾瘾痛?
2016年下半年软考证书什么时候发
鑫河小家电地址有知道的么?有点事想过去
从上海到河南林州怎么坐车??
四川水利职业学校哪个专业好,比较适合女生读
冰点还原没设置密码电脑就自动重启啦现在该怎
新建VB工程,在窗体添加一个文本框,名称为“
Tp-L|NK_30262c密码
烟是怎么抽的步骤
今年29了,毕业以来一直在国企上班,几年前从
如何看涨停板 同花顺中
关于手机播放720P和540P区别问题
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?