实现任意角度渐变填充(三) -- 多色渐变填充文字

   本文介绍怎样实现任意角度的文字多色渐变填充。

    因为文字填充区是由若干个不规则的图形组成的,因此渐变填充文字比渐变填充矩形(见《实现任意角度渐变填充(一) -- 双色渐变填充矩形》和《实现任意角度渐变填充(二) -- 多色渐变填充矩形》)要复杂一些。需要先建立一个临时位图,以黑底白字形式将文字画在临时位图上,然后以临时位图数据为掩码图,对文字填充区域进行填充,如果掩码图某坐标的象素值为白色,那么对文字填充区的相应坐标的象素进行填充,否则不填充,下面是多色渐变文字填充的实现代码:

    上面的代码中,除了建立文字掩码图的过程和文字填充过程外,大部分过程和《实现任意角度渐变填充(二) -- 多色渐变填充矩形》是相同的,文字填充过程也是在矩形填充过程基础上修改的。

    下面是个在窗口显示文字的例子:

    例子中的LinearGradientFillRect见《实现任意角度渐变填充(一) -- 双色渐变填充矩形》或者《实现任意角度渐变填充(二) -- 多色渐变填充矩形》。

    例子运行界面截图:

界面截图1

    从界面截图看,多色文字填充过程是成功的。但是遗憾的是文字边缘有很多锯齿,为此,我对掩码图的制作过程作了改进,对文字掩码图进行了反走样处理,同时,文字填充过程也要做相应的改变,下面是改进后的过程代码:

    为了加快反走样过程和填充过程速度,下面是用BASM代码优化后的AntiAliasMask和LinearMaskFill过程:

    用改进后的多色填充文字过程再次运行上面的例子代码,其运行界面截图如下:

界面截图2

    这个多色文字填充界面比前面的效果好多了。

    指导和建议请来信:mao.maozefa@gmail.commaozefa@hotmail.com

    后记:本文的填充过程支持ARGB颜色填充,GetGradientColors过程就是采用常规ARGB合成方法计算的颜色缓冲区各元素的颜色值,后经CSDN网友winnuke指出:如果填充颜色的Alpha小于255时,按常规ARGB合成方法计算的颜色会导致人眼视觉偏差,必须先将颜色的RGB按Alpha进行预乘,即转换为PARGB格式后进行合成,合成完毕后再转换回ARGB格式(见《http://topic.csdn.net/u/20091118/20/4f96e8c5-dcea-41ae-ac07-492526462b9d.html?64533》)。为此,本文对GetGradientColors进行了修改,但《实现任意角度渐变填充(一) -- 双色渐变填充矩形》一文中的SetGradientColors没作修改,因为那篇文章的内容只是作为本文的导入篇,就让它保持原貌吧。在这里再次对网友winnuke表示感谢

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值