網上很多NV21數據直接使用BitmapFactory的代碼是錯誤的

  • 典型的錯誤代碼
        BitmapFactory.Options options = new BitmapFactory.Options();
        Paint paint = new Paint();
        paint.setAntiAlias(true);
        paint.setStyle(Paint.Style.STROKE);
        
        Bitmap bitmap = BitmapFactory.decodeByteArray(nv21, 0, nv21.length, options);
        if (bitmap != null) {
            m_canvas.drawBitmap(bitmap, m_srcRect, m_dstRect, paint);
        }
  • NV21轉RGB的辦法

https://blog.csdn.net/quantum7/article/details/105720150

  • 查表法

吾亦用了幾套查表法,結果是顏色不對,而且性能比上述更慢。最後把這些代碼全部刪除。

  • JPEG中轉
            YuvImage yuvimage = new YuvImage(
                    data,
                    ImageFormat.NV21,
                    mPreviewSize.width,
                    mPreviewSize.height,
                    null);

            mBaos = new ByteArrayOutputStream();
            yuvimage.compressToJpeg(new Rect(0, 0, mPreviewSize.width, mPreviewSize.height), 100, mBaos);
            mImageBytes = mBaos.toByteArray();

            //將mImageBytes轉換成bitmap
            BitmapFactory.Options options = new BitmapFactory.Options();
            options.inPreferredConfig = Bitmap.Config.RGB_565;
            mBitmap = BitmapFactory.decodeByteArray(mImageBytes, 0, mImageBytes.length, options);
            icon.setImageBitmap(mBitmap);

  

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章