2013-06-26 58 views
1

我在Android中遇到了Air Native Extension的問題。位圖Android中的頻道順序不同

ANE從Actionscript端接收位圖,將其壓縮爲jpeg格式並將其發送回將寫入存儲器的Actionscript。

一切都很好,但最後一件事。

看來,渠道爲了ActionScript是比Android的不同,所以我的壓縮圖像已經制定BLUE的紅色..這裏是代碼:

的Actionscript(我使用的庫所謂deng.fzip.FZipLibrary獲得從zip包位圖)

__image = __fl.getBitmapData(path); 
__de = new DataExchange(); 
__ba = __de.bitmapEncode(__image) as ByteArray; 

的Android

... 
try { 
    inputValue = (FREBitmapData)arg1[0]; 
    inputValue.acquire(); 
    int srcWidth = inputValue.getWidth(); 
    int srcHeight = inputValue.getHeight(); 
    Bitmap bm = Bitmap.createBitmap(srcWidth, srcHeight, Config.ARGB_8888); 
    bm.copyPixelsFromBuffer(inputValue.getBits()); 
    ByteArrayOutputStream os = new ByteArrayOutputStream(); 
    bm.compress(Bitmap.CompressFormat.JPEG, 80, os); 
    compressed = os.toByteArray(); 
    inputValue.release(); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

try { 
    returnValue = FREByteArray.newByteArray(); 
    returnValue.setProperty("length", FREObject.newObject(compressed.length)); 
    returnValue.acquire(); 
    ByteBuffer returnBytes = returnValue.getBytes(); 
    returnBytes.put(compressed, 0, compressed.length); 
    returnValue.release(); 
} 
... 

任何人有一個想法,在發送圖像之前,如何將紅色轉換爲藍色的android端?或者它需要在動作端完成?

非常感謝和問候,

Gianpiero

+0

我也嘗試了其他Bitmap.Config值,但它們不是很好..我想知道是否有可能創建一個匹配Actionscript通道順序的配置。 – Gianps

回答

1

可以切換顏色是這樣的:

(此代碼不產地來自我,可惜我忘了,我發現它,所以歸功於別的地方)

private Bitmap m_encodingBitmap   = null; 
private Canvas m_canvas     = null; 
private Paint m_paint     = null;  
private final float[] m_bgrToRgbColorTransform = 
    { 
     0, 0, 1f, 0, 0, 
     0, 1f, 0, 0, 0, 
     1f, 0, 0, 0, 0, 
     0, 0, 0, 1f, 0 
    }; 
private final ColorMatrix    m_colorMatrix    = new ColorMatrix(m_bgrToRgbColorTransform); 
private final ColorMatrixColorFilter m_colorFilter    = new ColorMatrixColorFilter(m_colorMatrix); 

... 

try{ 

FREBitmapData as3Bitmap = (FREBitmapData)args[0]; 
as3Bitmap.acquire(); 
m_encodingBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); 
m_canvas  = new Canvas(m_encodingBitmap); 
m_paint   = new Paint(); 
m_paint.setColorFilter(m_colorFilter); 

m_encodingBitmap.copyPixelsFromBuffer(as3BitmapBytes); 
as3Bitmap.release(); 
// 
// Convert the bitmap from BGRA to RGBA. 
// 
m_canvas.drawBitmap(m_encodingBitmap, 0, 0, m_paint); 

... 

}

希望可以幫助... Timm

+0

它工作!你是一位救世主!非常感謝Timm,我怎麼能給你這個聲望信用? – Gianps

+0

很高興我能幫到你。你可以將答案標記爲「有用」作爲開始;) –

+0

我不能這樣做..它說我至少需要15個聲望..我#對不起,我是一個新用戶,我會做我什麼時候可以!再次感謝 – Gianps