今天逛技术论坛 看到有一个 神人(比我厉害的我都称之为神人) 贴出一个代码,用C#创建一个异形的窗口。
狐表论坛早就有了有关于异形的窗口创建的案例
案例里面的两种方案 都有缺陷
方案1: e.Form.BaseForm.TransparencyKey = Color.Black
具有清除不干净的缺陷,但是简单好用。
方案2:
Dim frm As System.Windows.Forms.Form = e.Form.BaseForm
path.AddArc(frm .ClientRectangle, 190, 90)
path.AddLine(frm .Right, frm .Top + 50, frm .Left + 100, frm .Bottom)
path.CloseFigure()
frm.Region = new Region(path)
具有难度高的缺点,使用GDI绘制,容易造成绘制复杂图形,思维与代码混乱。但是绘制的窗体整洁
而我今天要推荐的是集合上述两点优势 简单好用
此主题相关图片如下:1.jpg
已经简单的封装了,回复下载就可以用的
以下内容只有回复后才可以浏览
----------下面的代码是求帮忙翻译的-----------
但是这里面也有问题:
以下内容为程序代码:
1 using System;
2 using System.Collections.Generic;
3 using System.ComponentModel;
4 using System.Data;
5 using System.Drawing;
6 using System.Text;
7 using System.Windows.Forms;
8 using System.Drawing.Drawing2D;
9
10 namespace WindowsFormsApplication1
11 {
12 public partial class Form1 : Form
13 {
14 public Form1()
15 {
16 InitializeComponent();
17 }
18
19 private void Form1_Load(object sender, EventArgs e)
20 {
21 ///<summary>
22 /// 设置不规则窗体
23 ///</summary>
24 ///<param name="sender"></param>
25 ///<param name="e"></param>
26
27 //从指定的位图中获取alpha透明度大于 10 的区域
28 Bitmap img = (Bitmap)pictureBox1.Image;
29 GraphicsPath grapth = GetNoneTransparentRegion(img, 155);
30 this.Region = new Region(grapth);
31
32 //要显示的图片设置为窗体背景
33 this.BackgroundImage = pictureBox1.Image;
34 this.BackgroundImageLayout = ImageLayout.Zoom;
35
36 //在修改窗体尺寸之前设置窗体为无边框样式
37 this.FormBorderStyle = FormBorderStyle.None;
38 this.Width = pictureBox1.Image.Width;
39 this.Height = pictureBox1.Image.Height;
40 }
41 ///<summary>
42 /// 返回指定图片中的非透明区域(方法)
43 ///</summary>
44 ///<param name="img">位图</param>
45 ///<param name="alpha">alpha 小于等于该值的为透明</param>
46 ///<returns></returns>
47 public static GraphicsPath GetNoneTransparentRegion(Bitmap img, byte alpha)
48 {
49 int height = img.Height;
50 int width = img.Width;
51 int xStart, xEnd;
52 GraphicsPath grpPath = new GraphicsPath();
53 for (int y = 0; y < height; y++)
54 {
55 //逐行扫描
56 for (int x = 0; x < width; x++)
57 {
58 //略过连续透明的部分
59 while (x < width && img.GetPixel(x, y).A <= alpha)
60 {
61 x++;
62 }
63 //不透明部分;
64 xStart = x;
65 while (x < width && img.GetPixel(x, y).A > alpha)
66 {
67 x++;
68 }
69 xEnd = x;
70 if (img.GetPixel(x - 1, y).A > alpha)
71 {
72 grpPath.AddRectangle(new Rectangle(xStart, y, xEnd - xStart, 1));
73 }
74 }
75 }
76 return grpPath;
77 }
78 }
79 }
80
GetNoneTransparentRegion 方法中狐表里翻译之后出现的情况是X参数错误,还求高手帮助
[此贴子已经被作者于2014-5-8 14:43:31编辑过]
还是菜鸟 刚刚飞 学习学习,多接触一些 比较有想法的代码算法 有益身心健康