Преобразование байтового массива [] BGRA во что-то более полезное / быстрое (JAVA) - PullRequest
1 голос
/ 19 мая 2011

У меня есть массив byte [], который содержит растровые данные BGRA (например, первый байт = синий компонент, второй = зеленый, пятый = следующий пиксель, синий) и я хотел бы поиграть с ним.

В частности, есть ли класс Java, который уже предназначен для обертывания чего-то подобного? Мне интересно, потому что я хотел бы сделать мой код максимально аккуратным / правильным, и если у Java уже есть скомпилированная версия, которая работает быстрее, я бы согласился с этим.

Более конкретно, я хочу преобразовать массив byte [] в 2 массива, где BGR1 [] + BGR2 [] = BGR и A1 = A2 = A. Есть предложения?

Я, конечно, мог бы просто написать сырой код для этого, но, возможно, есть более аккуратный / быстрый способ.

Ответы [ 2 ]

0 голосов
/ 02 июля 2015

Я не знаю, если это быстро, но это, безусловно, более полезно.Мой массив исходных данных поступил из Color Stream из Kinect, используя J4KSDK .

Моя цель с помощью этого метода состояла в том, чтобы прочитать двоичные байты изображения.Я уверен, что вы можете изменить его для своих собственных нужд.

/* 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;
}
0 голосов
/ 19 мая 2011

Вы могли видеть этот другой вопрос , в котором есть ответы для хороших библиотек манипулирования изображениями Java.

...