




已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Alpha 混合线条和填充.NET Framework 4.5其他版本在 GDI+ 中,颜色为 32 位值:alpha、红色、绿色和蓝色各 8 位。alpha 值指示颜色的透明度,即颜色与背景色的混合程度。Alpha 值的范围是 0 到 255,其中 0 表示完全透明的颜色,255 表示完全不透明的颜色。Alpha 混合是源颜色数据和背景颜色数据之间逐个像素的混合。给定源颜色的三个分量(红色、绿色和蓝色)都按照以下公式与背景颜色的相应分量混合:显示颜色 = 源颜色 alpha / 255 + 背景颜色 (255 - alpha) / 255例如,假设源颜色的红色分量是 150,背景颜色的红色分量是 100。如果 alpha 值是 200,则结果颜色的红色分量按以下公式计算:150 200 / 255 + 100 (255 200) / 255 = 139本节内容如何:绘制不透明和半透明的线条演示如何绘制 alpha 混合线条。如何:用不透明和半透明的画笔绘制解释如何使用画笔进行 alpha 混合。如何:使用复合模式控制 Alpha 混合描述如何使用CompositingMode控制 alpha 混合。如何:使用颜色矩阵设置图像中的 Alpha 值解释如何使用ColorMatrix对象控制 alpha 混合。如何:绘制不透明和半透明的线条.NET Framework 4.5其他版本在绘制线条时,必须将Pen对象传递给Graphics类的DrawLine方法。Pen构造函数的参数之一是Color对象。若要绘制不透明的线条,请将颜色的 alpha 分量设置为 255。要绘制半透明的线条,请将 alpha 分量设置为 1 到 254 之间的任意值。在背景上绘制半透明的线条时,线条的颜色与背景的颜色相混合。alpha 分量指定线条颜色和背景颜色的混合方式:alpha 值越接近于 0,背景颜色的权重越大;alpha 值越接近于 255,线条颜色的权重越大。示例下面的示例先绘制位图,然后以该位图作为背景再绘制三条线条。第一个线条的 alpha 分量的值是 255,因此它是不透明的。第二个和第三个线条的 alpha 分量的值为 128,因此它们是半透明的,您可透过线条看到背景图像。用于设置CompositingQuality属性的语句导致在混合第三个线条时伴随灰度校正。下面的插图显示以下代码的输出。C#VB Dim bitmap As New Bitmap(Texture1.jpg) e.Graphics.DrawImage(bitmap, 10, 5, bitmap.Width, bitmap.Height) Dim opaquePen As New Pen(Color.FromArgb(255, 0, 0, 255), 15) Dim semiTransPen As New Pen(Color.FromArgb(128, 0, 0, 255), 15) e.Graphics.DrawLine(opaquePen, 0, 20, 100, 20) e.Graphics.DrawLine(semiTransPen, 0, 40, 100, 40) e.Graphics.CompositingQuality = CompositingQuality.GammaCorrected e.Graphics.DrawLine(semiTransPen, 0, 60, 100, 60)编译代码前面的示例是为使用 Windows 窗体而设计的,它需要Paint事件处理程序的参数PaintEventArgse。如何:用不透明和半透明的画笔绘制.NET Framework 4.5其他版本在填充形状时,必须将Brush对象传递给Graphics类的某个填充方法。SolidBrush构造函数的一个参数是Color对象。若要填充不透明的形状,请将颜色的 alpha 分量设置为 255。若要填充半透明形状,请将 alpha 分量设置为 1 到 254 之间的任意值。在填充半透明形状时,形状的颜色与背景的颜色相混合。Alpha 分量指定形状颜色和背景颜色的混合方式。Alpha 值越接近于 0,背景颜色的权重越大;Alpha 值越接近于 255,形状颜色的权重越大。示例下面的示例绘制一个位图,然后填充三个遮盖该位图的椭圆。第一个椭圆的 alpha 分量的值是 255,因此它是不透明的。第二个和第三个椭圆的 alpha 分量是 128,因此它们是半透明的,所以您可透过椭圆看到背景图像。设置CompositingQuality属性的调用导致在混合第三个椭圆的同时进行灰度校正。下面的插图显示以下代码的输出。C#VB Dim bitmap As New Bitmap(Texture1.jpg) e.Graphics.DrawImage(bitmap, 50, 50, bitmap.Width, bitmap.Height) Dim opaqueBrush As New SolidBrush(Color.FromArgb(255, 0, 0, 255) Dim semiTransBrush As New SolidBrush(Color.FromArgb(128, 0, 0, 255) e.Graphics.FillEllipse(opaqueBrush, 35, 45, 45, 30) e.Graphics.FillEllipse(semiTransBrush, 86, 45, 45, 30) e.Graphics.CompositingQuality = CompositingQuality.GammaCorrected e.Graphics.FillEllipse(semiTransBrush, 40, 90, 86, 30)如何:使用复合模式控制 Alpha 混合.NET Framework 4.5其他版本有时可能希望创建具有以下特征的离屏位图: 颜色的 alpha 值小于 255。 在创建位图时颜色之间不进行 alpha 混合。 在显示完成的位图时,在显示设备上,位图中的颜色与背景色进行 alpha 混合。若要创建这样的位图,请构造一个空白的Bitmap对象,然后基于该位图构造Graphics对象。将Graphics对象的复合模式设置为CompositingMode.SourceCopy。示例下面的示例创建一个基于Bitmap对象的Graphics对象。该代码使用Graphics对象和两个半透明画笔 (alpha = 160) 在该位图上绘画。该代码使用半透明画笔填充红色椭圆和绿色椭圆。绿色椭圆与红色椭圆重叠,但是绿色并不与红色混合,这是因为Graphics对象的复合模式已设置为SourceCopy。该代码在屏幕上绘制该位图两次:一次是在白色背景上,一次是在多色背景上。位图中属于两个椭圆的像素的 alpha 分量的值是 160,因此这些椭圆与屏幕上的背景色相混合。下面的插图显示代码示例的输出。请注意,这些椭圆与背景相混合,但椭圆之间不进行混合。代码示例包含这条语句:C#VB bitmapGraphics.CompositingMode = CompositingMode.SourceCopy如果您希望这些椭圆除了与背景相混合外,椭圆之间也相互混合,请将上述语句更改为如下语句:C#VB bitmapGraphics.CompositingMode = CompositingMode.SourceOver下面的插图显示修改后的代码的输出。C#VB Create a blank bitmap. Dim myBitmap As New Bitmap(180, 100) Create a Graphics object that we can use to draw on the bitmap. Dim bitmapGraphics As Graphics = Graphics.FromImage(myBitmap) Create a red brush and a green brush, each with an alpha value of 160. Dim redBrush As New SolidBrush(Color.FromArgb(160, 255, 0, 0) Dim greenBrush As New SolidBrush(Color.FromArgb(160, 0, 255, 0) Set the compositing mode so that when we draw overlapping ellipses, the colors of the ellipses are not blended. bitmapGraphics.CompositingMode = CompositingMode.SourceCopy Fill an ellipse using a red brush that has an alpha value of 160. bitmapGraphics.FillEllipse(redBrush, 0, 0, 150, 70) Fill a second ellipse using a green brush that has an alpha value of 160. The green ellipse overlaps the red ellipse, but the green is not blended with the red. bitmapGraphics.FillEllipse(greenBrush, 30, 30, 150, 70) Set the compositing quality of the forms Graphics object. e.Graphics.CompositingQuality = CompositingQuality.GammaCorrected Draw a multicolored background. Dim colorBrush As New SolidBrush(Color.Aqua) e.Graphics.FillRectangle(colorBrush, 200, 0, 60, 100) colorBrush.Color = Color.Yellow e.Graphics.FillRectangle(colorBrush, 260, 0, 60, 100) colorBrush.Color = Color.Fuchsia e.Graphics.FillRectangle(colorBrush, 320, 0, 60, 100) Display the bitmap on a white background. e.Graphics.DrawImage(myBitmap, 0, 0) Display the bitmap on a multicolored background. e.Graphics.DrawImage(myBitmap, 200, 0)编译代码前面的示例是为使用 Windows 窗体而设计的,它需要PaintEventHandler的参数PaintEventArgse。如何:使用颜色矩阵设置图像中的 Alpha 值.NET Framework 4.5其他版本Bitmap类(从Image类继承)和ImageAttributes类提供用于获取和设置像素值的函数。可使用ImageAttributes类修改整个图像的 alpha 值,或可调用Bitmap类的SetPixel方法修改单个像素的值。示例ImageAttributes类具有许多可用于在呈现过程中修改图像的属性。在下面的示例中,ImageAttributes对象用于将所有的 alpha 值设置为原来的 80%。这是通过初始化一个颜色矩阵并将矩阵中的 alpha 缩放值设置为 0.8 来实现的。颜色矩阵的地址传递给ImageAttributes对象的SetColorMatrix方法,而ImageAttributes对象传递给Graphics对象的DrawString方法。在呈现过程中,位图中的各个 alpha 值被转换成它们的原始值的 80%,这将导致与背景相混合的图像。正如下面的插图所显示的那样,位图图像看上去是透明的;您可透过它看到纯黑的线条。当图像位于背景的白色部分之上时,图像就与白色相混合。在图像与黑色线条的相交处,图像与黑色相混合。C#VB Create the Bitmap object and load it with the texture image. Dim bitmap As New Bitmap(Texture.jpg) Initialize the color matrix. Note the value 0.8 in row 4, column 4. Dim matrixItems As Single()() = _ New Single() 1, 0, 0, 0, 0, _ New Single() 0, 1, 0, 0, 0, _ New Single() 0, 0, 1, 0, 0, _ New Single() 0, 0, 0, 0.8F, 0, _ New Single() 0, 0, 0, 0, 1 Dim colorMatrix As New ColorMatrix(matrixItems) Create an ImageAttributes object and set its color matrix. Dim imageAtt As New ImageAttributes() imageAtt.SetColorMatrix( _ colorMatrix, _ ColorMatrixFlag.Default, _ ColorAdjustType.Bitma
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 社区支持体系构建分析-洞察及研究
- 城市更新社会资本动员-洞察及研究
- 影视制作项目预算编制方法研究
- 学前教育课程设计与教学案例集
- 百度员工消防知识培训课件
- 小学数学春季教学详细课时计划
- 装修设计任务书编写及注意事项
- 幼儿园家长开放日活动总结范文
- 安徽省舒城一中2017-2018学年高二上学期研究性学习材料生物(六)
- 转租会所合同(标准版)
- 一年级道德法治教案设计
- 乒乓球俱乐部管理制度
- 2024年上海市自来水公司招聘笔试冲刺题(带答案解析)
- PCBA的外观及焊接性能检验工艺文件模板
- 妊娠糖尿病的预防和治疗
- 项目人员离职与人员替补计划管理方案
- 隧道坍塌应急知识培训课件
- 专利侵权比对分析报告
- 社情民意信息写作与传播
- 电气施工图审图要点
- 货车司机服务流程
评论
0/150
提交评论