接下来我打算把PNG图片放到TImage控件里来做成模拟的按钮。这个比较简单,经过几下尝试,发现只要“Image1.Picture.Assign(Png);”这一句就可以了,同样很好的显示了渐变透明的效果。(注:不能使用“Image1.Picture.Bitmap.Assign(Png);”,虽然这句代码能画出图形,但对于透明是无可奈何的,全部变成黑色;另外不可使用“Image1.Assign(Png);”或“Image1.Picture.Bitmap.Canvas.Assign(Png);”,否则产生运行时类型转换错误,因为TPngObject根本不能转换为TImage或者TBitmapCanvas类型。)另外对于TImage控件中已经有图片的情况,想要将PNG图片盖上去,可以使用TPngObject对象的Draw方法:
注意:此处不能使用TImage的方法,不然原图就没了;而且还需要调用TImage.Refresh后才能显示更改后的图片(如图2,左边是显示单PNG图片,右边是将PNG图片盖到已有的位图上去)。
< 动脑 > 以“浅色-深色”渐变图片为例,假设我们要将所有含“深色”色的像素转成指定色彩,也就是要转成类似白-红、浅黄-深黄渐变的效果。我们知道TColor其实是用一定范围的十六进制数值来表示的,从低位到高位每个字节分别保存红、绿、蓝的值。对于灰阶色来说,每一种“灰色”其R、G、B的三值是相等的,从黑(RGB(0,0,0))到白(RGB(255,255,255))。经过一段时间的琢磨,我发现对某一像素点的色彩转换大致的思路应该是: 该点目标色离白色的“距离”(之间的值差,姑且这样称呼吧)/指定彩色离白色的“距离” = 该点灰色离白色的“距离”/最深色离白色的“距离” 这里的“距离”其实分别是该种颜色的R、G、B三值和255的差的绝对值。有点昏了是吧?呵呵,其实应该是比较好理解的,直观一点的原始公式(分别计算R、G、B三值)是: (255 - 目标色R值) / (255 - 指定色R值) = (255 - 灰色R值) / (255 - 最深色R值) 移项后可得解: 目标色R值 = 255 - (255 - 灰色R值) * (255 - 指定色R值) / (255 - 最深色R值)
|
正在阅读:用Delphi来DIY一个软件"变脸"功能用Delphi来DIY一个软件"变脸"功能
2004-12-30 10:36
出处:
责任编辑:linjixiong
键盘也能翻页,试试“← →”键