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

发布于 2024-12-04 08:43:50 字数 331 浏览 1 评论 0原文

我想要做的是将灰度 alpha 位图与 RGB 颜色值相乘,然后将生成的 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 中最快的方法是什么?

What I want to do is multiple a grayscale alpha bitmap with an RGB color value, and then draw the resulting RGB bitmap to screen additively, that is, at each pixel I want:

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

I know I can construct an intermediate RGB bitmap or texture holding (colorValue[r/g/b] * grayscaleBitmapValue), but I'd rather avoid this wasteful step if possible, because each alpha bitmap will be multiplied with quite a number of different color values.

What's the fastest way to do this in either 2D or OpenGL ES ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

心奴独伤 2024-12-11 08:43:50

对于 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) 进行加法混合。

For 2D drawing, set up your Paint object like this:

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

For OpenGL, your fragment shader could look like this:

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

... and call glBlendFunc(GL_ONE,GL_ONE) to do additive blending.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文