转自:http://blog.csdn.net/gxtdjh/article/details/6215766

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

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

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

          /// <summary>/// 根据图片计算GraphicsPath路径/// </summary>/// <param name="img">gif或者png图片</param>/// <returns>图片不透明区域路径</returns>/// 用这个代码的时候需要选择项目属性->生成->勾选"允许不安全代码"/// 因为这里用到了指针,C#用指针式不安全的,具体可查看msdnprivate 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;}/// <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);}

C# Winform控件贴透明png图片遇到的问题相关推荐

  1. C# Winform控件对透明图片重叠时导致图片不透明的解决方法

    C# Winform控件对透明图片重叠时导致图片不透明的解决方法 参考文章: (1)C# Winform控件对透明图片重叠时导致图片不透明的解决方法 (2)https://www.cnblogs.co ...

  2. MFC控件绘制透明png图片或者半透明图片

    网上有各种各样的办法,其实使用CImage类就可以完成这些 比如说图片上某种颜色设为透明色,如黑色为透明色 imageTemp.SetTransparentColor(RGB(0,0,0)); ima ...

  3. MFC 加入背景图片并让控件背景透明

    /*加入背景图片*/ BOOL CTOOLDlg::OnEraseBkgnd(CDC* pDC) {  // TODO: 在此加入消息处理程序代码和/或调用默认值  CDialog::OnEraseB ...

  4. 基于C#的GIS开发20210426之类库同名类、制作winform控件、建立控件之间的关联、自己制作控件、自己控件引入项目、显示磁盘文件夹、磁盘文件与picturebox建立关系、图像拉伸

    C#知识点与控件的制作 一.C#中多个类库中有同名类,区分问题 二.制作最简单的winform控件 1.拖动加载 事件代理 筛选器 2.显示属性.事件,及其修改 常见控件属性介绍 窗体常用的方法 常见 ...

  5. 11、设置视图半透明而子控件不透明

    让一个控件半透明,通常我们第一个想到的方法就是调整控件的alpha值.但是如果你的视图上有其他子控件就会发现这样的方法达不到你的预期. 对视图直接设置alpha属性的值会导致其子控件也变得半透明,而通 ...

  6. .Net(C#)自定义WinForm控件之小结篇(强力推荐)

    强力推荐的网站:http://www.myfirm.cn/News/dotNetGUIAPI/ 本文转载:http://www.myfirm.cn/News/dotNetUserInterface/2 ...

  7. 《Dotnet9》系列-开源C# Winform控件库1《HZHControls》强力推荐

    大家好,我是Dotnet9小编,一个从事dotnet开发8年+的程序员.我最近在写dotnet分享文章,希望能让更多人看到dotnet的发展,了解更多dotnet技术,帮助dotnet程序员应用dot ...

  8. WINFORM控件开发 来源:博客园 作者:纶巾客

    (1)开篇 我本人不是专业的控件开发人员,只是在平常的工作中,需要自己开发一些控件.在自己开发WinForm控件的时候,没有太多可以借鉴的资料,只能盯着MSDN使劲看,还好总算有些收获.现在我会把这些 ...

  9. Winform控件开发(1)——Label(史上最全)

    文章目录 前言: 一.属性 1.Name 属性 2.AllowDrop 属性 3.Anchor 属性 4.AutoEllipsis 属性 5.autosize 属性 6.backcolor 属性 7. ...

最新文章

  1. 2013eoe移动开发者大会圆满落幕
  2. mysql 优化 系统_MySQL 优化(一)
  3. 如何学习asp.net 2.0
  4. Python 爬虫 书籍爬取实例
  5. blender 3d打印_使用Blender创建用于打印的3D模型:高级技巧
  6. Dijkstra算法原理
  7. 计算机cpu电压,怎么样调电脑cpu电压啊
  8. Virtual Private Network(虚拟专用网络隧道)详解
  9. Widows系统截屏工具
  10. 通达信波段王指标公式主图_通达信波段专用主图指标公式
  11. 导出CAD文件的几种方法
  12. 网易163vip邮箱、163.net邮箱、新浪vip邮箱、QQ邮箱,哪款更符合商务邮件的需求
  13. 仅需三步,远程桌面控制公司内网电脑
  14. Salesforce诊断网络问题以排除性能下降
  15. jmeter性能测试(配置原件)
  16. 解决“你的设备不支持Google Play服务”而无法运行App的问题
  17. 【震惊】没有java环境也能运行jar,在不安装jdk下如何运行jar包
  18. Geany设置全黑色主题
  19. 使用Mahout搭建推荐系统之入门篇-Mahout实战
  20. 从Oracle导出数据到TXT文件从TXT文件导入数据到Oracle

热门文章

  1. 小仙女手账的神仙句子
  2. 目录遍历(Directory traversal)
  3. 高级商务办公软件应用【9】
  4. PDF如何转换成EPUB格式
  5. Riche million espérer interroger chasse.
  6. java对外接口安全问题_怎么保证对外暴露接口的安全性(调用频率限制)
  7. 96微信编辑器html在哪里,96微信编辑器怎么把文章生成链接?
  8. 从14连号概率题来看“做学问不知足”
  9. h5跳转页面很慢_【干货】小技巧实现H5跨页帧数跳转
  10. 领英1度2度3度是什么意思,如何突破领英好友人脉限制