Domanda

Sto cercando di creare la classe Bitmap usando BitmapFactory. Ottengo l'immagine di anteprima della fotocamera in formato YUV e decodifica manualmente nell'immagine in scala di grigi. Quando provo a creare un oggetto Bitmap tramite BitmapFactory, restituisce null.

        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);
È stato utile?

Soluzione

BitmapFactory viene utilizzato per creare un'immagine da un file di immagine codificato usando JPEG o PNG. Se si lanciano semplicemente dati grezzi, la funzione non ha idea di cosa stai usando. RGB? Yuv? 24 bit? 32 bit?

Afaik non esiste un modo nativo per creare un'immagine dai dati YUV, dovresti almeno convertirla in RGB. Ecco una risposta che la dimostra: Ottenere frame dall'immagine video in Android.

Naturalmente, puoi usare l'NDK per creare una funzione di conversione nativa, che sarà molto più veloce. Oppure potresti scansionare la documentazione per un convertitore YUV, ma l'unica cosa che ho trovato in una rapida scansione è Yuvimage, che ti permetterà solo di convertirlo in un flusso JPEG.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top