码迷,mamicode.com
首页 > 移动开发 > 详细

android EmbossMaskFilter 浮雕效果实现

时间:2015-01-15 18:27:13      阅读:304      评论:0      收藏:0      [点我收藏+]

标签:android   图像处理   硬件加速   

网上貌似还没有EmbossMaskFilter的相关文章,所以我在这里对他进行研究。

Lee出品,转载请注明出处。

首先说明一点:在网上查到有人说MaskFilter不能使用,也就是有的效果不能显示,在此予以纠正:由于android 4.0以上系统会默认开启硬件加速(可以通过代码canvas.isHardwareAccelerated()来判断),由于硬件加速不够完善,导致部分效果不能正常显示,如何关闭硬件加速戳:点击打开链接

好了,回到正题,先来看看源码:

public class EmbossMaskFilter extends MaskFilter {
    /**
     * Create an emboss maskfilter
     *
     * @param direction  array of 3 scalars [x, y, z] specifying the direction of the light source
     * @param ambient    0...1 amount of ambient light
     * @param specular   coefficient for specular highlights (e.g. 8)
     * @param blurRadius amount to blur before applying lighting (e.g. 3)
     * @return           the emboss maskfilter
     */
    public EmbossMaskFilter(float[] direction, float ambient, float specular, float blurRadius) {
        if (direction.length < 3) {
            throw new ArrayIndexOutOfBoundsException();
        }
        native_instance = nativeConstructor(direction, ambient, specular, blurRadius);
    }

    private static native int nativeConstructor(float[] direction, float ambient, float specular, float blurRadius);
}

源码其实也是很简单的,创建一个浮雕滤镜,也就是指定光源的方向和环境光强度来添加浮雕效果。

看看参数含义:

direction 是float数组,定义长度为3的数组标量[x,y,z],来指定光源的方向

ambient 取值在0到1之间,定义背景光 或者说是周围光

specular 定义镜面反射系数。

blurRadius 模糊半径。

如下代码设置的效果

		float []direction = new float[]{10, 10, 10};
		float ambient = 0.5f;
		float specular = 1;
		float blurRadius = 1;
		EmbossMaskFilter filter = new EmbossMaskFilter(direction, ambient, specular, blurRadius);
		paint.setMaskFilter(filter);
效果:技术分享

修改几个参数的值:

		float ambient = 0.1f;
		float specular = 5;
		float blurRadius = 5;

效果:技术分享


android EmbossMaskFilter 浮雕效果实现

标签:android   图像处理   硬件加速   

原文地址:http://blog.csdn.net/hnulwt/article/details/42740895

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!