我发布了一个有关在pixmap上绘制文本以在运行时生成动态纹理的问题,该问题已得到解决here

是否有一种简单的方法可以对复制到新的像素图的字体进行着色,还是需要逐个像素手动进行设置?我在libgdx库或Google上找不到任何明显的内容。

我当前的流程是:


创建一个新的像素图
在该像素图上绘制一个字符
将像素图转换为纹理以进行渲染。


在该过程的某个时刻,我希望能够在运行时为字体着色。

更新代码以测试Jyro117的答案。 (不起作用,请参见下图)

    // Set up the base image
    Pixmap newPixmap = new Pixmap(backImage.getWidth(),
            backImage.getHeight(), Format.RGBA8888);
    newPixmap.drawPixmap(backImage, 0, 0);

    // Copy out the letter from our fontsheet
    // and draw the char to a new pixmap
    Glyph glyph = fontData.getGlyph(getLetterToDraw().charAt(0));
    Pixmap charPixmap = new Pixmap(glyph.width, glyph.height,
            Format.RGBA8888);
    charPixmap.drawPixmap(fontPixmap, 0, 0, glyph.srcX, glyph.srcY,
            glyph.width, glyph.height);

    // try to tint it?!
    charPixmap.setColor(1, 0, 0, 100);
    charPixmap.fillRectangle(0, 0, newPixmap.getWidth(),
            newPixmap.getHeight());

    // copy the character to our new bitmap
    newPixmap.drawPixmap(charPixmap, (BLOCK_SIZE - glyph.width) / 2,
            (BLOCK_SIZE - glyph.height) / 2);

    texture = new Texture(newPixmap);

    newPixmap.dispose();
    charPixmap.dispose();

最佳答案

Pixmap具有着色所需的所有功能。


获取字体的像素图(在您的情况下为fontPixmap)
确保已启用Alpha混合。
设置color,(将alpha设置为所需的水平)
Draw rectangle在整个字体图像上(0、0,宽度,高度)
现在,您的字体的像素图具有所需的色彩


希望可以为您清除它。

编辑:

好吧,所以我明白您的意思了,默认情况下似乎无法更改Pixmap混合的“类型”。至少在没有我调查底层代码的情况下。 BitmapFont通过使用字形的顶点数据来解决此问题,并将每个渲染为一种形状而不是图像。因此,要执行此操作,您将必须执行两次以下操作:


首先,我们用所需的颜色和Alpha填充像素图(注意:此值在0f和1f之间,因此您的Alpha应该是0.3f而不是100)
接下来,您遍历图像的所有像素,并寻找其alpha值低于特定阈值(应为0.3f左右)的像素。然后,您可以将低于阈值的那些像素的alpha设置为0,或者做一些像Math.pow(alpha,3)之类的事情。基本上,您刚刚添加到图像中的alpha(使用源而不是混合)减少/删除,但仅适用于应该是透明的像素。您可能需要尝试使用不同的值或归约技术,才能使其看起来正确。


注意:您可以通过调用getPixel()遍历像素数据,或使用getPixels()获取字节缓冲区,第4个字节将是像素的alpha值,介于0和255之间。

编辑2:

我只是想到了一种替代方法,可以使用Frame Buffer


将字体纹理渲染到帧缓冲区上。
使用适当的alpha混合功能在整个帧缓冲区上绘制一个带有alpha的彩色矩形(不知道哪一个在我头顶上方,但您希望仅当dst的alpha大于0时才适用)。
从帧缓冲区中获取纹理并将其用作着色字体。

关于java - 用libgdx着色像素图,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21920965/

10-11 01:09
查看更多