java - Android surfaceview获取的YUV数据如何进行YUV转RGB转Bitmap转BGRA?
怪我咯
怪我咯 2017-04-18 10:49:03
0
1
879

用surfaceview获取到YUV类型的byte[]数据如何进行YUV转RGB转Bitmap转BGRA的过程?
希望有大神贴点代码,或者给一些相关资料借鉴下。

怪我咯
怪我咯

走同样的路,发现不同的人生

membalas semua(1)
PHPzhong

Saya tidak tahu sama ada terdapat cara yang lebih baik dalam Android.
Jika C++ digunakan untuk pemprosesan, adalah disyorkan untuk mencari perpustakaan untuk melakukannya, seperti ffmpeg.

1 Tukar YUV kepada RGB

Formula untuk menukar dua kepada satu sama lain adalah seperti berikut
RGB kepada YUV

    Y  =      (0.257 * R) + (0.504 * G) + (0.098 * B) + 16
    Cr = V =  (0.439 * R) - (0.368 * G) - (0.071 * B) + 128
    Cb = U = -(0.148 * R) - (0.291 * G) + (0.439 * B) + 128

YUV ke RGB

    B = 1.164(Y - 16)                   + 2.018(U - 128)
    G = 1.164(Y - 16) - 0.813(V - 128) - 0.391(U - 128)
    R = 1.164(Y - 16) + 1.596(V - 128)

Anda boleh menulis kod anda sendiri untuk melaksanakannya di sini, ia tidak sukar.
Tetapi YUV mempunyai pelbagai format pensampelan dan kaedah penyimpanan, jadi apa yang anda dapat di sini tidak mencukupi byte[], anda juga perlu tahu rupa YUV.
Oleh itu, adalah disyorkan agar anda terus mencari cara untuk mendapatkan data piksel RGB.

2. RGB ke Peta Bit

RGB ini juga mengalami masalah yang sama, mungkin RGB565/RGB555/RGB24/RGB32 dll. Anda masih perlu tahu bagaimana rupanya.
Pustaka imej umum mempunyai pelaksanaan yang berkaitan dengan operasi Bitmap, yang boleh menetapkan data piksel secara langsung di sini. Contohnya, QBitmap::fromData

dalam Qt

Jika anda mahu melakukannya sendiri, anda perlu menulis sendiri pengepala fail. Untuk maklumat berkaitan, sila rujuk http://blog.csdn.net/o_sun_o/...

3. Bitmap ke BGRA

Jika anda melakukan ini sendiri, cuma ambil piksel dan simpan sendiri. Semua saluran Alpha yang ditambah ialah 0.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan