BitmapFactory нулевая проблема в Android - PullRequest
0 голосов
/ 03 декабря 2011

Я пытаюсь создать класс растрового изображения, используя растровое изображение.Я получаю предварительное изображение с камеры в формате YUV и вручную декодирую изображение в градациях серого.Когда я пытаюсь создать растровый объект через BitmapFactory, он возвращает ноль.

        try {
            for (int y = 0; y < frameHeight; y++){
                for (int x = 0; x < frameWidth; x++){

                    byte grey = YUVData[y * frameWidth + x];
                    convertedData[y * stride + 3 * x] = grey;
                    convertedData[y * stride + 3 * x + 1] = grey;
                    convertedData[y * stride + 3 * x + 2] = grey;

                }
            }

            Bitmap bitmap =(Bitmap) BitmapFactory.decodeByteArray(convertedData, 0, convertedData.length);

1 Ответ

2 голосов
/ 03 декабря 2011

BitmapFactory используется для создания изображения из файла изображения, который был закодирован с использованием JPEG или PNG. Если вы просто добавляете необработанные данные, функция не знает, какую кодировку вы используете. RGB? YUV? 24-бит? 32-битный?

AFAIK Нет собственного способа создания изображения из данных YUV, вам, по крайней мере, сначала нужно преобразовать его в RGB. Вот ответ, который демонстрирует это: Получение кадров из видеоизображения в Android .

Конечно, вы можете использовать NDK для создания встроенной функции преобразования, которая будет намного быстрее. Или вы можете отсканировать документацию для YUV-конвертера, но единственное, что я обнаружил при быстром сканировании, это YuvImage , что позволит вам преобразовать его только в поток JPEG.

...