安卓摄像头 data 转bitmap

本文介绍了一个用于从摄像头捕获的YUV数据创建Bitmap的方法,并实现了根据摄像头方向进行旋转的功能。此方法首先通过YuvImage压缩JPEG数据,然后使用Matrix进行旋转,最后调整Bitmap大小以适应显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public static Bitmap getBitMap(byte[] data, Camera camera, boolean mIsFrontalCamera) {
   int width = camera.getParameters().getPreviewSize().width;
   int height = camera.getParameters().getPreviewSize().height;
   YuvImage yuvImage = new YuvImage(data, camera.getParameters()
         .getPreviewFormat(), width, height, null);
   ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
   yuvImage.compressToJpeg(new Rect(0, 0, width, height), 80,
         byteArrayOutputStream);
   byte[] jpegData = byteArrayOutputStream.toByteArray();
   // 获取照相后的bitmap
   Bitmap tmpBitmap = BitmapFactory.decodeByteArray(jpegData, 0,
         jpegData.length);
   Matrix matrix = new Matrix();
   matrix.reset();
   if (mIsFrontalCamera) {
      matrix.setRotate(-90);
   } else {
      matrix.setRotate(90);
   }
   tmpBitmap = Bitmap.createBitmap(tmpBitmap, 0, 0, tmpBitmap.getWidth(),
         tmpBitmap.getHeight(), matrix, true);
   tmpBitmap = tmpBitmap.copy(Bitmap.Config.ARGB_8888, true);

   int hight = tmpBitmap.getHeight() > tmpBitmap.getWidth() ? tmpBitmap
         .getHeight() : tmpBitmap.getWidth();

   float scale = hight / 800.0f;

   if (scale > 1) {
      tmpBitmap = Bitmap.createScaledBitmap(tmpBitmap,
            (int) (tmpBitmap.getWidth() / scale),
            (int) (tmpBitmap.getHeight() / scale), false);
   }
   return tmpBitmap;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值