Почему BitmapFactory.decodeByteArray не работает с предварительным просмотром камеры?

Итак, я пытаюсь использовать распознавание лиц с камерой, поэтому мне нужно преобразовать массив байтов, предоставленный обратному вызову предварительного просмотра, в растровое изображение, используя этот код:

Camera.PreviewCallback previewCallback=new Camera.PreviewCallback()
{
    @Override
    public void onPreviewFrame(byte[] data, Camera camera) 
    {
        BitmapFactory.Options options = new BitmapFactory.Options();
        Bitmap mBitmap = BitmapFactory.decodeByteArray(data, 0, data.length, options);
        if(mBitmap==null) faceDetected=false;
        else              faceDetected=(findFace(mBitmap)!=null);            
    }
};

К сожалению, mBitmap всегда равен нулю, а параметры outHeight и outWidth всегда равны -1, что указывает на ошибку декодирования. Диагностики естественно нет, так что исправить не получится.


person user3660664    schedule 02.05.2015    source источник
comment
BitmapFactory может не обрабатывать формат изображения, используемый кадрами предварительного просмотра камеры (например, YUV).   -  person CommonsWare    schedule 02.05.2015
comment
Возможно, это так, но не очень полезно ;-) Вы это точно знаете, в таком случае знаете, как решить проблему?   -  person user3660664    schedule 02.05.2015
comment
stackoverflow.com/questions/20298699/ и stackoverflow.com/questions/5212531 / выполнить поиск Google на android onpreviewframe imageview. Я бы начал там.   -  person CommonsWare    schedule 02.05.2015
comment
Спасибо. Одна из присланных вами ссылок ссылается на другой код, который конвертирует в BMP через YUV. Совершенно нелепо, но это работает. ;-) Я все еще ошеломлен тем, что decodeByteArray не работает с форматом предварительного просмотра камеры по умолчанию.   -  person user3660664    schedule 03.05.2015