Conversión de un conjunto de bytes [] BGRA en algo más útil / rápido (JAVA)

Tengo una matriz de bytes [] que contiene datos ráster BGRA (por ejemplo, primer byte = componente azul, segundo = verde, quinto = siguiente píxel, azul) y me gustaría jugar con él.

Específicamente, ¿hay una clase Java que ya está diseñada para envolver algo como esto? Me pregunto, porque me gustaría hacer que mi código sea lo más ordenado / correcto posible, y si Java ya tiene una versión compilada que es más rápida, entonces iría con eso.

Aún más específicamente, quiero transformar la matriz de bytes [] en 2 matrices, donde BGR1 [] + BGR2 [] = BGR, y A1 = A2 = A. ¿Alguna sugerencia?

Por supuesto, podría escribir un código sin formato para esto, pero tal vez haya una forma más ordenada / rápida.

Respuesta 1

No sé si esto es rápido, pero seguro que es más útil. Mi matriz de datos de origen provino de Color Stream de Kinect, usando J4KSDK .

Mi objetivo con este método era leer los bytes binarios de una imagen. Estoy seguro de que puede modificarlo para sus propios usos.

/* Reference imports */
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;

/* method */
public byte[] getImage(byte[] bytes) throws IOException {
    int width = 640;
    int height = 480;

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

    // (byte) bgra to rgb (int)
    for (int i = 0, j = 0; i < bytes.length; i = i + 4, j++) {
        int b, g, r;

        b = bytes[i] & 0xFF;
        g = bytes[i + 1] & 0xFF;
        r = bytes[i + 2] & 0xFF;

        shifted[j] = (r << 16) | (g << 8) | b;
    }

    BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
    bufferedImage.getRaster().setDataElements(0, 0, width, height, shifted);

    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    ImageIO.write(bufferedImage, "JPG", baos);
    byte[] ret = baos.toByteArray();

    return ret;
}
Respuesta: 2

Estoy ejecutando el código Java del Directorio A, y también hay un archivo myBat.bat allí. Quiero usar Java para ejecutar el archivo bat. El contenido de myBat.bat es: svn update C: \ DirectoryB \ file.txt I ...

Puedo hacer esto cuando conozco los tipos de objetos en tiempo de compilación: int obj1 = 3; float obj2 = (float) obj1; int obj3 = (int) obj1; short obj4 = (short) obj1; ¿Cuál es la forma más eficiente y sencilla de producir ...

Quiero crear una columna e instalar un botón en esta última columna de esta tabla. pinakas públicas de JPanel (String [] pinaka) {int sr = 0; // int ari8mos = 0; Cuerda[] ...

Quiero utilizar algún mecanismo para hacer algo como esto: tengo un servidor de aplicaciones que recibe solicitudes para procesar pedidos. Una solicitud puede tener uno o dos pedidos. Para procesar el pedido, el ...