Rumah > Soal Jawab > teks badan
用surfaceview获取到YUV类型的byte[]数据如何进行YUV转RGB转Bitmap转BGRA的过程?
希望有大神贴点代码,或者给一些相关资料借鉴下。
PHPz2017-04-18 10:51:03
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.
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.
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
Jika anda mahu melakukannya sendiri, anda perlu menulis sendiri pengepala fail. Untuk maklumat berkaitan, sila rujuk http://blog.csdn.net/o_sun_o/...
Jika anda melakukan ini sendiri, cuma ambil piksel dan simpan sendiri. Semua saluran Alpha yang ditambah ialah 0.