天天看点

网上很多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);