将[灰度位图* colorValue]添加到Android上的屏幕上的最快方法

时间:2011-09-12 21:08:48

标签: android graphics opengl-es bitmap alphablending

我想要做的是多个具有RGB颜色值的灰度alpha位图,然后将得到的RGB位图绘制成加法屏幕,即在我想要的每个像素处:

p_new[r/g/b] = p_old[r/g/b] + colorValue[r/g/b] * grayscaleBitmapValue

我知道我可以构建一个中间RGB位图或纹理保持(colorValue [r / g / b] * grayscaleBitmapValue),但如果可能的话,我宁愿避免这个浪费的步骤,因为每个alpha位图都会相乘一个不同颜色值的数量。

在2D或OpenGL ES中执行此操作的最快方法是什么?

1 个答案:

答案 0 :(得分:1)

对于2D绘图,请按如下方式设置Paint对象:

paint.setColorFilter(
    new PorterDuffColorFilter(colorValue, PorterDuff.Mode.MULTIPLY));
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.ADD));

对于OpenGL,您的片段着色器可能如下所示:

varying vec2 texcoord;
uniform sampler2D texture;
uniform vec4 multColor;
void main() {
    gl_FragColor = texture2D(texture, texcoord)*multColor;
}

...并调用glBlendFunc(GL_ONE,GL_ONE)进行加法混合。

相关问题