国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

C#WinForm制作異形窗體/控件

2024-07-21 02:17:33
字體:
來源:轉載
供稿:網友
制作異形窗體或控件的思路一般都是想辦法生成一個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,制作出異形控件。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 武威市| 城口县| 布拖县| 平乐县| 潮州市| 钟山县| 贺兰县| 安徽省| 柘荣县| 民丰县| 平顶山市| 苏尼特右旗| 英吉沙县| 普洱| 拉萨市| 扬中市| 盘锦市| 镇康县| 上饶市| 平罗县| 曲阜市| 阿城市| 伊吾县| 彭阳县| 贺兰县| 松潘县| 汽车| 桦甸市| 临夏县| 元朗区| 北川| 阿瓦提县| 家居| 两当县| 兴文县| 河南省| 博罗县| 玉龙| 鹤庆县| 琼中| 乡城县|