private void speiaHack(EffectFactory effectFactory, float [] weights)
{
mEffect = effectFactory.createEffect(
EffectFactory.EFFECT_SEPIA);
try {
Field field = Class.forName("android.media.effect.SingleFilterEffect").getDeclaredField("mFunction");
field.setAccessible(true);
Object mFunction = field.get(mEffect);
Object mFilter =val(mFunction, "mFilter");
Object mFilterContext =val(mFunction, "mFilterContext");
Method initmethod = mFilter.getClass().getMethod("initProgram", new Class[]{Class.forName("android.filterfw.core.FilterContext"), int.class});
initmethod.invoke(mFilter, new Object[]{mFilterContext, 3});
Object mProgram =val(mFilter, "mProgram");
Method method = mProgram.getClass().getMethod("setHostValue", new Class[]{String.class, Object.class});
method.invoke(mProgram, new Object[]{"matrix", weights});
} catch (Exception e) {
e.printStackTrace();
}
}
扩展speia特效,支持任意RGB颜色变换矩阵,原理很简单,不解释
最新推荐文章于 2021-12-03 20:36:21 发布