- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
在Visual C#下实现图像的透明处理
在各类有关.Net的技术论坛上常有人问如何实现透明的图像或图形效果,答案很简单,就是Alpha Blending技术。Alpha Blending技术是一个混合各种颜色值并产生透明效果的过程。具体的实现原理也很简单:在GDI+中,任何一种颜色由四种成分组成――Alpha,Red,Green和Blue。其中的Alpha成分则代表了一种颜色的透明程度,它的值在0到255之间变化。不言而喻,0代表完全透明而255则表示完全不透明。因此,你只要用透明效果创建一种颜色并用该颜色来画图像就可以完成图像的透明处理了。
原理虽然比较简单,但是要初学者实际操作起来可能也并不是那么容易。所以下面我就向大家展示一个很好的实例。在该实例中,我先在窗体上画了一些图形,这些图形包括直线、曲线、椭圆等,同时这些图形有的是不透明的、有的是半透明的、有的是强透明的(注:其中的强透明意思为非常透明,几乎为全透明,但是又隐约可见)。如果你有GDI+编程的一些基本知识,完成这些应该并不困难。然后,我在这些图形上覆盖了一幅图像,在正常情况(也就是不透明的情况)下,窗体上的图形为图像所遮盖,所以应该是看不见的。接着,我通过一个按钮的消息响应函数使得图像具有透明效果,这样一来的话,窗体上原来的那些图形就会浮现出来。
实现方法
首先,打开VS.net,新建一个Visual C#的项目,选择模板为Windows应用程序,同时不妨命名为TransparentImage,图示如下:
图1
接着,进行窗体布局。往窗体上添加三个按钮以完成用户输入控制。将窗体的Text属性设置为图像的透明处理示例;将三个按钮的Text属性分别设置为半透明、强透明、不透明;同时,为界面美观起见将三个按钮的FlatStyle属性均设置为Flat。最终,窗体布局的图示如下:
图2
完成了窗体布局,我们接着开始编写代码。首先,我们添加窗体的Paint消息响应函数。读者可以发现,我们在进行窗体布局的时候并没有在窗体上添加pictureBox控件,那么我们怎么显示图像并画出各种图形呢?这就要用到窗体的Paint消息响应函数了,函数实现如下:
private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
Graphics g = this.CreateGraphics();
g.Clear(this.BackColor);
DrawPerson();
//画一幅图像
Image curImage = Image.FromFile(@e:\photo.jpg);
g.DrawImage(curImage, 0, 0, curImage.Width, curImage.Height);
g.Dispose();
}
(注:其中的e:\photo.jpg为笔者电脑上图像文件的路径,读者可以将它改为自己电脑上图像文件的路径,下同。该文件可在源代码文件夹中找到。)
在上面的函数中,我们先建立了一个Graphics对象,该对象就是专门用来画图形和图像的。我们还调用了本类的一个私有成员函数DrawPerson(),该函数实现的功能就是在窗体上画一些图形,这些图形包括了椭圆、曲线、三角形,而这些图形合在一起恰好构成了一个人的头部轮廓,所以我姑且将该函数命名为了DrawPerson()。在调用完毕后,就在窗体上画出一幅图像(用一个图像文件完成)。最后就是Graphics对象的Dispose工作。其中,DrawPerson()函数的具体实现如下:
private void DrawPerson()
{
Graphics g = this.CreateGraphics();
g.Clear(this.BackColor);
//画人头轮廓
Rectangle rect1 = new Rectangle(75, 0, 150, 200);
g.FillEllipse(new SolidBrush(Color.FromArgb(225, 155, 150, 25)), rect1);
//定义三支画笔,其中第一支为不透明,第二支为半透明,第三支为强透明
Pen opqPen = new Pen(Color.FromArgb(155, 120, 205, 190), 15);
Pen transPen = new Pen(Color.FromArgb(128, 25, 150, 25), 12);
Pen totTransPen = new Pen(Color.FromArgb(140, 120, 18, 10), 10);
文档评论(0)