studio programacion herramientas fundamentos con avanzado aplicaciones android air bitmap air-native-extension

programacion - Los canales de mapa de bits orden diferentes en Android



manual de android en pdf (1)

Puedes cambiar los colores de esta manera:

(Este código no proviene de mí, lamentablemente olvidé dónde lo encontré, así que el crédito se va a otro lado)

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

}

Espero que ayude ... Timm

Tengo un problema con una extensión de Air Native en Android.

El ANE recibe un mapa de bits del lado de Actionscript, lo comprime en formato jpeg y lo envía de vuelta al Actionscript que lo escribirá en el almacenamiento.

Todo está bien, pero una última cosa.

Parece que el orden de los canales para Actionscript es diferente que en Android, por lo que mi imagen comprimida tiene colores ROJOS en lugar de AZUL ... aquí está el código:

Actionscript (estoy usando una biblioteca llamada deng.fzip.FZipLibrary para obtener el mapa de bits de un paquete zip)

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

Androide

... 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(); } ...

Alguien tiene una idea sobre cómo convertir el rojo en azul en el lado de Android antes de enviar la imagen de nuevo? ¿O debe hacerse en el lado de actionscript?

Muchas gracias y saludos,

Gianpiero