文字到位图的颜色错误

时间:2015-05-04 07:16:17

标签: java android air-native-extension

我们正在为air建立一个原生扩展,以便从文本生成位图数据。

下面的代码生成了一个笑脸蚂蚁的位图" test"那些应该是黄色但颜色是蓝色。

http://i.stack.imgur.com/wC1ZH.png

经过大量搜索和尝试不同的示例代码后,我们陷入困境。

    public static Bitmap drawText(String text, int textWidth, int textSize, String color) {

    try {
        text = URLDecoder.decode("%F0%9F%98%8D test", "UTF-8");
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }

    // Get text dimensions
    TextPaint textPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG | Paint.LINEAR_TEXT_FLAG);
    textPaint.setColor(Color.parseColor("#ffe400"));
    textPaint.setTextSize(textSize);
    textPaint.setAntiAlias(true);
    StaticLayout mTextLayout = new StaticLayout(text, textPaint, textWidth, Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false);

    // Create bitmap and canvas to draw to
    Bitmap b = Bitmap.createBitmap(textWidth, mTextLayout.getHeight(), Config.ARGB_8888);
    Canvas c = new Canvas(b);

    // Draw text
    c.save();
    c.translate(0, 0);
    mTextLayout.draw(c);
    c.restore();

    Extension.log("Color " + Integer.toString(b.getPixel(15,10), 16));

    return b;


}

当记录返回的像素时,它已经是蓝色的,所以我们假设它在这个函数中出错了。

1 个答案:

答案 0 :(得分:0)

似乎红色和蓝色通道已切换。

通过反转蓝色和红色chanel来修正它:

private static Bitmap reversColors(Bitmap b){

    int width = b.getWidth();
    int height = b.getHeight();

    int[] pixels = new int[width * height];
    b.getPixels(pixels, 0, width, 0, 0, width, height);

    int[] finalArray = new int[width * height];

    for(int i = 0; i < finalArray.length; i++) {
        int red = Color.red(pixels[i]);
        int green = Color.green(pixels[i]);
        int blue = Color.blue(pixels[i]);
        int alpha = Color.alpha(pixels[i]);
        finalArray[i] = Color.argb(alpha, blue, green, red);
    }

    return Bitmap.createBitmap(finalArray, width, height, Bitmap.Config.ARGB_8888);

}

这不是最好的方法,但我找不到更好的解决方案