ColorFilter

ColorFilter

颜色过滤器可以与Paint一起使用,以修改使用该Paint的每个像素的颜色。
这是一个不应该直接使用的抽象类。

public class ColorFilter {
   

    private static class NoImagePreloadHolder {
   
        public static final NativeAllocationRegistry sRegistry = new NativeAllocationRegistry(
                ColorFilter.class.getClassLoader(), nativeGetFinalizer(), 50);
    }

    /** @deprecated 使用子类构造函数直接替代。 */
    @Deprecated
    public ColorFilter() {
   }

    /** 当前native SkColorFilter实例。 */
    private long mNativeInstance;
    // 可以立即销毁
    private Runnable mCleaner;

    long createNativeInstance() {
   
        return 0;
    }

    void discardNativeInstance() {
   
        if (mNativeInstance != 0) {
   
            mCleaner.run();
            mCleaner = null;
            mNativeInstance = 0;
        }
    }

    /** @hide */
    public long getNativeInstance() {
   
        if (mNativeInstance == 0) {
   
            mNativeInstance = createNativeInstance();
            if (mNativeInstance != 0) {
   
            	// 注意:这里必须检查null,因为如果native SkColorFilter在绘制时是no-op,
            	// 那么createNativeInstance()可能返回nullptr。
            	// 有关更多信息,请参见子类创建方法的native实现。
                mCleaner = NoImagePreloadHolder.sRegistry.registerNativeAllocation(
                        this, mNativeInstance);
            }
        }
        return mNativeInstance;
    }

    private static native long nativeGetFinalizer();
}

LightingColorFilter

可用于模拟简单lighting效果的颜色过滤器。LightingColorFilter由两个参数定义,一个用于乘以源颜色(称为colorMultiply),另一个用于相加源颜色(称为colorAdd)。alpha通道不受此颜色过滤器的影响。

给定源颜色RGB,计算得到的R’G’B’颜色:
R’ = R * colorMultiply.R + colorAdd.R
G’ = G * colorMultiply.G + colorAdd.G
B’ = B * colorMultiply.B + colorAdd.B
结果固定到每个通道的[0…255]范围。

public class LightingColorFilter extends ColorFilter {
   
    @ColorInt
    private int mMul;
    @ColorInt
    private int mAdd;

    /** 创建一个ColorFilter,将RGB乘以一个颜色,然后相加第二个颜色。mul和add的alpha被忽略。 */
    public LightingColorFilter(@ColorInt int mul, @ColorInt int add) {
   
        mMul = mul;
        mAdd = add;
    }

    /** 应用ColorFilter时,返回用于乘以源颜色的RGB颜色。 */
    @ColorInt
    public int getColorMultiply() {
   
        return mMul;
    }

    /** 应用ColorFilter时,指定用于乘以源颜色的RGB颜色。忽略此颜色的alpha。 @hide */
    public void setColorMultiply(@ColorInt int mul) {
   
        if (mMul != mul) {
   
            mMul = mul;
            discardNativeInstance();
        }
    }

    /** 应用ColorFilter时,返回将相加源颜色的RGB颜色。 */
    @ColorInt
    public int getColorAdd() {
   
        return mAdd;
    }

    /** 应用ColorFilter时,指定将相加源颜色的RGB。忽略此颜色的alpha。 @hide */
    public void setColorAdd(@ColorInt int add) {
   
        if (mAdd != add) {
   
            mAdd = add;
            discardNativeInstance();
        }
    }

    @Override
    long createNativeInstance() {
   
        return native_CreateLightingFilter(mMul, mAdd);
    }

    private static native long native_CreateLightingFilter(int mul, int add);
}

PoterDuffColorFilter

一种颜色过滤器,可用于使用单一颜色和特定PorterDuff混合模式对源像素进行着色。

public class PorterDuffColorFilter extends ColorFilter {
   
    @ColorInt
    private int mColor;
    private PorterDuff.Mode mMode;

    /** 
     * 创建使用指定颜色和PorterDuff模式的ColorFilter。
     *
     * @param color 与指定PorterDuff模式一起使用的ARGB源颜色
     * @param mode 应用的PorterDuff模式
     */
    public PorterDuffColorFilter(@ColorInt int color, @NonNull PorterDuff.Mode mode) {
   
        mColor = color;
        mMode = mode;
    }

    /** 应用此filter时,返回用于着色源像素的ARGB颜色。 @hide */
    @ColorInt
    public int getColor() {
   
        return mColor;
    }

    /** 在应用此ColorFilter时,指定对源像素进行着色的颜色。 @hide */
    public void setColor(@ColorInt int color) {
   
        if (mColor != color) {
   
            mColor = color;
            discardNativeInstance();
        }
    }

    /** 应用此filter时,返回用于将此ColorFilter的颜色与源像素混合的PorterDuff模式。 @hide */
    public PorterDuff.Mode getMode() {
   
        return mMode;
    }

    /** 绘制时,将此ColorFilter的颜色与源像素混合时使用指定的PorterDuff模式。 @hide */
    public void setMode(@NonNull PorterDuff.Mode mode) {
   
        if (mode == null) {
   
            throw new IllegalArgumentException("mode must be non-null");
        }
        mMode = mode;
        discardNativeInstance();
    }

    @Override
    long createNativeInstance() {
   
        return native_CreatePorterDuffFilter(mColor, mMode.nativeInt);
    }

    @Override
    public boolean equals(Object object) {
   
        if (this == object) {
   
            return true;
        }
        if (object == null || getClass(
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值