2015-05-04 76 views
-1

我們正在構建一個空氣本地擴展,以從文本生成位圖數據。文本到位圖錯誤的顏色

下面的代碼生成一個笑臉螞蟻「測試」的位圖應該是黃色但顏色是藍色。

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; 


} 

當記錄返回的像素時,它已經是藍色的,所以我們假設它在這個函數中出錯了。

回答

0

看起來紅色和藍色的顏色通道是切換的。

通過反轉藍色和紅色香奈兒固定它:

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); 

} 

這是不是最好的方式,但我不能找到一個更好的解決方案