1

我在 Android 中遇到了 Air Native Extension 的问题。

ANE 从 Actionscript 端接收 Bitmap,将其压缩为 jpeg 格式,然后将其发送回 Actionscript,后者会将其写入存储。

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

似乎 Actionscript 的通道顺序与 Android 中的不同,所以我的压缩图像用红色代替了蓝色。这是代码:

Actionscript(我正在使用一个名为 deng.fzip.FZipLibrary 的库从 zip 包中获取位图)

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

安卓

...
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 端将红色转换为蓝色?还是需要在动作脚本端完成?

非常感谢和问候,

詹皮耶罗

4

1 回答 1

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

...

}

希望有帮助......蒂姆

于 2013-06-26T08:17:16.230 回答