
//顺时针
private void button1_Click(object sender, EventArgs e)
{
Bitmap bitmap1 = (Bitmap)pictureBox2.Image
Bitmap bitmap2 = new Bitmap(pictureBox2.Height, pictureBox2.Width)
for (int i = 0i <bitmap1.Widthi++)
{
for (int j = 0j <bitmap1.Heightj++)
{
Color color = bitmap1.GetPixel(i, j)
bitmap2.SetPixel(bitmap2.Width - j - 1, bitmap2.Height - i - 1, color)
}
}
pictureBox3.Image = bitmap2
}
//逆时针
private void button2_Click(object sender, EventArgs e)
{
Bitmap bitmap1 = (Bitmap)pictureBox2.Image
Bitmap bitmap2 = new Bitmap(pictureBox2.Height, pictureBox2.Width)
for (int i = 0i <bitmap1.Widthi++)
{
for (int j = 0j <bitmap1.Heightj++)
{
Color color = bitmap1.GetPixel(i, j)
bitmap2.SetPixel(j, i, color)
}
}
pictureBox3.Image = bitmap2
}
计算时调用:Form3 frm=new Form3()
在Form3的窗口初始化事件中加入如下形式的代码:
TextBox3=Calculate(input1,input2)
就好了。
你说的太抽象,我只能给出一个大致的形式。
可以考虑使用全局变量嘛。
制作异形窗体或控件的思路一般都是想办法生成一个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 = 0y <nheight++y)
{
istransrgn = true
for (x = 0x <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条)