Rumah  >  Soal Jawab  >  teks badan

java - Android surfaceview获取的YUV数据如何进行YUV转RGB转Bitmap转BGRA?

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

怪我咯怪我咯2764 hari yang lalu836

membalas semua(1)saya akan balas

  • PHPz

    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.

    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.

    balas
    0
  • Batalbalas