C#WinForm制作异形窗体/控件-.NET教程,C#语言

制作异形窗体或控件的思路一般都是想办法生成一个region,然后设置给指定的窗口或控件。生成region的方法有非常多,最常用的就是从一幅图片生成,把该图片中的透明色部分“抠”掉,剩下的部分作为一个region。设置窗口或控件的region能用setwindowrgn api,不过.net framework封装了这个操作,在c#中只要对窗口或控件的region属性赋值就能了。下面我就把我在c#中实现异形窗体的核心代码贴出来给大家看看,有什么意见尽管提,别客气哦j 首先,是个根据bitmap对象生成region的方法:
/// <summary>
/// 取得一个图片中非透明色部分的区域。
/// </summary>
/// <param name="picture">取其区域的图片。</param>
/// <param name="transparentcolor">透明色。</param>
/// <returns>图片中非透明色部分的区域</returns>
private region bmprgn(bitmap picture, color transparentcolor)
{
     int nwidth = picture.width;
     int nheight = picture.height;
     region rgn = new region();
     rgn.makeempty();
     bool istransrgn;//前一个点是否在透明区
     color curcolor;//当前点的颜色
     rectangle currect = new rectangle();
     currect.height = 1;
     int x = 0, y = 0;
     //逐像素扫描这个图片,找出非透明色部分区域并合并起来。
     for(y = 0; y < nheight; ++y)
     {
         istransrgn = true;
         for (x = 0; x < nwidth; ++x)
         {
              curcolor = picture.getpixel(x,y);
              if(curcolor == transparentcolor || x == nwidth - 1)//如果遇见透明色或行尾
                   {
                       if(istransrgn == false)//退出有效区
                       {
                            currect.width = x - currect.x;
                            rgn.union(currect);
                       }
                   }
                   else//非透明色
                   {
                       if(istransrgn == true)//进入有效区
                       {
                            currect.x = x;
                            currect.y = y;
                       }
                   }//if curcolor
                   istransrgn = curcolor == transparentcolor;    
              }//for x
         }//for y
         return rgn;      }   原理非常简单,就是对该图片逐行扫描,在每一行中把那些非透明色的矩形(只有一个像素高)合并(union)到一个region对象中,当扫描完整个图片,得到的也就是我们想要的region了。这种算法在非常多文章里都有介绍的。   有了region,下面就简单了: this.region = bmprgn(new bitmap("d:\\a.bmp"), color.fromargb(0, 0, 0)); 上面的代码就是把d:\a.bmp的轮廓作为主窗口的region的,假设该图片的背景黑色(color.fromargb(0, 0, 0))。其实不光是form,所有控件都能用这个方法设置region,制作出异形控件。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值