Java – how to render libgdx bitmapfont so that its pixel color is opposite to the background?

either

sb.setBlendFunction(GL10.GL_ONE_MINUS_DST_COLOR,GL10.GL_ZERO);
sb.begin();
font.setColor(1,1,1);
for (LineRect s: vertices){
     font.draw(sb,""+ s.x+","+.y,s.x,s.y);
}
sb.end();
sb.setBlendFunction(GL10.GL_ONE,GL10.GL_ONE_MINUS_SRC_ALPHA);

either

Gdx.gl10.glEnable(GL10.GL_COLOR_LOGIC_OP);
Gdx.gl10.glLogicOp(GL10.GL_XOR);

    sb.begin();
    font.setColor(1,1);
    for (LineRect s: vertices){
         font.draw(sb,s.y);
    }
    sb.end();


Gdx.gl10.glDisable(GL10.GL_COLOR_LOGIC_OP);

Working for me, what did I do wrong? How do I solve it?

Our idea is to draw a font, which consists of quadrilateral with partially transparent texture. It will always be visible unless the background is 50% gray Black background = white font, and so on

Solution

You need to test the brightness of the background color Here is a method I made for AWT color. It should be easy to adapt to the libgdx color class:

/**
 * Returns the brightness of the color,between 0 and 255.
 */
public static int getBrightness(Color c) {
    if (c == null) return -1;
    return (int) Math.sqrt(
        c.getRed() * c.getRed() * .241 +
        c.getGreen() * c.getGreen() * .691 +
        c.getBlue() * c.getBlue() * .068);
}

If brightness < 1 128, use light foreground, otherwise use dark foreground

The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>