惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

云风的 BLOG
云风的 BLOG
M
MIT News - Artificial intelligence
博客园 - Franky
J
Java Code Geeks
V
Visual Studio Blog
G
Google Developers Blog
罗磊的独立博客
MongoDB | Blog
MongoDB | Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Recent Announcements
Recent Announcements
Last Week in AI
Last Week in AI
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Stack Overflow Blog
Stack Overflow Blog
博客园 - 司徒正美
The GitHub Blog
The GitHub Blog
腾讯CDC
阮一峰的网络日志
阮一峰的网络日志
V
V2EX
博客园 - 【当耐特】
IT之家
IT之家
I
InfoQ
U
Unit 42
C
Check Point Blog
Martin Fowler
Martin Fowler

博客园 - 李佩亮

Windows 上免费安装 HEVC 视频编码器。 20210913 代码抓取的淘宝所有商品分类-到品牌 Fiddler 自动保存图片及相关内容 2016年度,这40项IT技能年薪轻松超过10万美元 云开发听说过没? Compilr 屌爆的在线开发工具 -_-# 中美互联网生存现状对比报告(给老外看的) 一山容二虎,支持最新版Log4Net 的模板引擎-NVeloCity 页面路径修正,ResolveUrl - 李佩亮 - 博客园 [摘抄]江湖经验:喝酒时玩的游戏大全! 做生意的10条规则,新手老鸟都可参照。 关于 linux 分区[转自ubuntu中文论坛] Flex中Image加载图片出错显示默认图片 - 李佩亮 - 博客园 分享C#高端视频教程 .net 下操作鼠标滚轮的事件 以及换算方法 总是忘记的oracle 函数 磁盘IO性能监控(Linux 和 Windows)[转] Background Intelligent Transfer Service 服务错误(BITS服务失败) 的修复解决方案 在XML中嵌入一个图片,一般采用转换为Base64 的做法(含转出代码) 才疏学浅,见识到一个没见过的数组转换类型方式(byte[] -> sbyte[]),特此拜祭一下。
C# Winform控件对透明图片重叠时的解决方法
李佩亮 · 2011-10-13 · via 博客园 - 李佩亮

用C# winform开发界面时会遇到很多小问题,比如贴透明的png图片或GIF图片后,图片无法透明,这点可以通过属性设置:外观/BackColor (Web TransParent)可以解决。

但当用多个控件时,如PictureBox,控件都贴透明图片后,两个PictureBox有重叠的地方,希望重叠的地方能透明,就是透视下面的控件部分,结果测试后发现两控件重叠透明的地方对整个框架的背景透明,但对下面控件无法透明,最后在网上找了一段代码,解决了这个问题。

解决时,对每个控件使用:ControlTrans(pic,pic.Image);然后层叠之后就可以透明了。

        

private unsafe static GraphicsPath subGraphicsPath(Image img)
        {
            if (img == nullreturn 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(00, 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 + 11));      //添加之前的矩形到  
                        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;
        }

        /// <summary>  
        
/// 调用此函数后使图片透明  
        
/// </summary>  
        
/// <param name="control">需要处理的控件</param>  
        
/// <param name="img">控件的背景或图片,如PictureBox.Image  
        
///   或PictureBox.BackgroundImage</param>  
        public static void ControlTrans(Control control, Image img)
        {
            GraphicsPath g;
            g = subGraphicsPath(img);
            if (g == null)
                return;
            control.Region = new Region(g);
        }