介绍 对于使用图标而不是按钮的应用程序,可能需要添加一些花哨的效果,而不是只显示一个上升的图标(当悬停时)。这个控件提供了一个有趣的视觉效果,当鼠标悬停在图标上时,图标可以缩放。此外,还有一个模糊属性,它将导致图标呈现为透明的(不需要一行代码!)当然,你可以把它关掉。 使用 你可以通过以下两个简单的步骤开始使用这个控件: 将控件添加到工具箱(如果您不知道如何操作,请右键单击工具箱,选择添加/删除项,找到Iconits。dll,并按OK)。 现在您已经看到了工具箱(Iconits)上的控件,可以开始使用它了。然而,这些特性是必不可少的: 属性nameTypeDescriptionBlurBooleanSet为真,否则设置为假。IconBitmapSet图标从任何可用的图像。IconSizeSizeIcon初始大小。当鼠标悬停在图标上时,图标的实际大小。当鼠标悬停在TooltipTextStringIcon上几秒钟时弹出的工具提示文本。 α类 如何使图像变得稍微透明的诀窍是通过创建三个额外的位图来代替原来的图像。这些额外的位图,具有不同的不透明度(0.25,0.5,0.75),将使图标的效果稍微褪色。 生成位图而不是直接渲染的想法当然是为了速度。另一个原因是,只有三个图像是必要的,这并不太多。因此,我们开发了一个类,它可以从可用图像中生成一个新的不透明级别的位图:Hide 复制Code
public static Bitmap returnAlpha(Bitmap bmp, int alpha) { Color col; Bitmap bmp2=new Bitmap(bmp); for (int i=0;i<bmp.Width;i++) for (int j=0;j<bmp.Height;j++) { col=bmp.GetPixel(i,j); if (col.A>0) bmp2.SetPixel(i,j,Color.FromArgb(min( col.A-alpha),col.R,col.G,col.B)); } return bmp2; }
它只是遍历图像并以新的透明级别重新绘制图像,当然,您不需要重新绘制已经透明的像素(Alpha=0)。 优化问题 当您开发这种需要大量计算的控件时,优化是一个关键问题。在这种情况下,由于使用了GDI+的DrawImage,问题是速度和图像闪烁。实现了双缓冲,使动画显示流畅。另一个问题是,只有在直接渲染透明图像时才会出现速度慢的问题。出于这个原因,我们构建了额外的位图,这导致了另一个缺点,即使用额外的内存。 历史 v0.1(2006年4月9日):初始版本。 实现alpha透明度,并缩放鼠标悬停。 本文转载于:http://www.diyabc.com/frontweb/news525.html