当前位置:   article > 正文

Android camera onPreviewFrame 图片旋转问题_android onpreviewframe的数据图旋转

android onpreviewframe的数据图旋转


Android开发中调用到摄像头camera及截图。通过测试发现,调用前置摄像头的预览图和截图、调用后置摄像头的预览图和截图,参数是不一样的。

调用前置摄像头:

camera = Camera.open(1);
camera.setDisplayOrientation(90);//正常预览。如果参数设为270度,则预览图像为倒置。

onPreviewFrame()中调用bitmapRotated = utils.PicProcessUtils.rotaingImageView(270, bmp);//参数270度,截图为正常图。90度截图是倒置的。

调用后置摄像头:

camera = Camera.open(0);
camera.setDisplayOrientation(90);//正常预览。如果参数设为270度,则预览图像为倒置。

onPreviewFrame()中调用bitmapRotated = utils.PicProcessUtils.rotaingImageView(90, bmp);//参数90度,截图为正常图。270度截图是倒置的

详细代码如下:

  1. private void preview() throws IOException {
  2. if (hasFrontFacingCamera()) {//如果有前置摄像头
  3. camera = Camera.open(1);
  4. } else {
  5. camera = Camera.open(0);
  6. }
  7. camera.setDisplayOrientation(90);
  8. Camera.Parameters params = camera.getParameters();
  9. List<Camera.Size> sizes = params.getSupportedPreviewSizes();
  10. Camera.Size selected = sizes.get(1);
  11. width = selected.width;
  12. height = selected.height;
  13. params.setPreviewSize(640, 480);
  14. // params.setPictureFormat(PixelFormat.RGB_565);
  15. // params.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
  16. // params.setPreviewSize(width, height);
  17. camera.setParameters(params);
  18. camera.setPreviewDisplay(holder);
  19. camera.startPreview();
  20. }
  1. @Override
  2. public void onPreviewFrame(byte[] data, Camera arg1) {
  3. // TODO Auto-generated method stub
  4. Log.e(TAG, "onPreviewFrame");
  5. Camera.Size size = camera.getParameters().getPreviewSize();
  6. final int w = size.width;
  7. final int h = size.height;
  8. final YuvImage image = new YuvImage(data, ImageFormat.NV21, w, h, null);
  9. ByteArrayOutputStream os = new ByteArrayOutputStream(data.length);
  10. System.out.println("in2");
  11. if (!image.compressToJpeg(new Rect(0, 0, w, h), 100, os)) {
  12. return;
  13. }
  14. // System.out.println("out1");
  15. byte[] tmp = os.toByteArray();
  16. Bitmap bmp = BitmapFactory.decodeByteArray(tmp, 0, tmp.length);
  17. // doSomethingNeeded(bmp); //自己定义的实时分析预览帧视频的算法
  18. if(hasFrontFacingCamera()) {
  19. bitmapRotated = utils.PicProcessUtils.rotaingImageView(270, bmp);//前置摄像头270度,后置摄像头90度
  20. } else {
  21. bitmapRotated = utils.PicProcessUtils.rotaingImageView(90, bmp);
  22. }
  23. // iv[i].setImageBitmap(bmp1);
  24. System.out.println("out2");
  25. ByteArrayOutputStream stream = new ByteArrayOutputStream();
  26. bitmapRotated.compress(Bitmap.CompressFormat.JPEG, 80, stream);
  27. tmp = stream.toByteArray();
  28. // doSomethingNeeded(bmp);
  29. Log.e("frameIndex=", frameIndex + "");
  30. if (frameIndex < 2) {
  31. use[frameIndex] = tmp;
  32. frameIndex++;
  33. }
  34. System.out.println("out3");
  35. return;
  36. }
  1. public static Bitmap rotaingImageView(int angle , Bitmap bitmap) {
  2. //旋转图片 动作
  3. Matrix matrix = new Matrix();;
  4. matrix.postRotate(angle);
  5. System.out.println("angle2=" + angle);
  6. // 创建新的图片
  7. Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0,
  8. bitmap.getWidth(), bitmap.getHeight(), matrix, true);
  9. return resizedBitmap;
  10. }


相关文章android camera 通过onPreviewFrame采集视频

Android系统Camera图片反转的一个问题

解决android有的手机拍照后上传图片被旋转的问题



声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/102861
推荐阅读
相关标签
  

闽ICP备14008679号