【问题标题】:camera intent auto rotate to 90 degree相机意图自动旋转到 90 度
【发布时间】:2013-10-30 22:53:39
【问题描述】:

在下面的代码中,我尝试使用本机相机拍照并上传到服务器,但是当我将其作为纵向并在图库中以横向查看时,这意味着它旋转了 90 度。请帮助:-

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

startActivityForResult(intent, REQUEST_CAMERA);

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == Activity.RESULT_OK) {
        if (requestCode == REQUEST_CAMERA) {

            handleCameraPhoto();
}
private void handleCameraPhoto() {
    Intent mediaScanIntent = new Intent(
            "android.intent.action.MEDIA_SCANNER_SCAN_FILE");
    File f = new File(mCurrentPhotoPath);
    Uri contentUri = Uri.fromFile(f);

    mediaScanIntent.setData(contentUri);
    getActivity().sendBroadcast(mediaScanIntent);
}

如何在保存到 SD 卡之前旋转图像?

【问题讨论】:

标签: android


【解决方案1】:
Matrix matrix=new Matrix();
imageView.setScaleType(ScaleType.MATRIX);   //required
matrix.postRotate((float) angle, pivX, pivY);
imageView.setImageMatrix(matrix);



This method does not require creating a new bitmap each time.. Hope this works.

【讨论】:

  • 如需更多帮助,请点击此链接...stackoverflow.com/questions/8981845/…
  • 请在您复制和粘贴另一个人的答案时给予积分!
  • @Amit 如果我 postRotate 到 90 度,所有手机都一样吗?因为我在 HTC 上测试它工作正常,无需为三星旋转。如果我错了,请纠正我
【解决方案2】:

我在列表视图中显示图像时也遇到了这种问题。但是使用 EXIF 数据,我能够将图像设置为正确的方向。

这是准备显示的位图对象:

  Matrix matrix = new Matrix();
  matrix.postRotate(getImageOrientation(url));
  Bitmap rotatedBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(),
  bitmap.getHeight(), matrix, true);

这是上面代码第二行中用来旋转图像方向的方法。

 public static int getImageOrientation(String imagePath){
     int rotate = 0;
     try {

         File imageFile = new File(imagePath);
         ExifInterface exif = new ExifInterface(
                 imageFile.getAbsolutePath());
         int orientation = exif.getAttributeInt(
                 ExifInterface.TAG_ORIENTATION,
                 ExifInterface.ORIENTATION_NORMAL);

         switch (orientation) {
         case ExifInterface.ORIENTATION_ROTATE_270:
             rotate = 270;
             break;
         case ExifInterface.ORIENTATION_ROTATE_180:
             rotate = 180;
             break;
         case ExifInterface.ORIENTATION_ROTATE_90:
             rotate = 90;
             break;
         }
     } catch (IOException e) {
         e.printStackTrace();
     }
    return rotate;
 }

这可能不是您问题的准确答案,它对我有用,希望对您有用。

【讨论】:

  • 我还有 1 个问题。如果我想在保存到 SD 卡之前旋转捕获的照片,我应该把这个代码放在哪里?在 onActivityResult 里面?
  • 当您将任何图像保存到 sdcard 时,它或多或少地通过流保存字节数组。这就是为什么 exifinterface 类用于保存方向、位置等数据的原因。我试过做你提到的,但没能做到。在我看来,尝试在显示图像视图时维护上面的代码(因为那是你最常使用图像的地方)。
  • 这对我有用!我使用三星 Galaxy Y 姜饼和三星 Galaxy S3 冰淇淋三明治进行了测试。这适用于所有运行 Android 的手机型号吗?非常感谢。 :)
  • 这里的变量bitmap是什么?
  • 这里的变量url是什么?因为我在这里不需要 url 的参与。只需要在 sdcard 中复制画廊照片,它就会被旋转@ShailAdi
猜你喜欢
  • 1970-01-01
  • 2012-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-20
相关资源
最近更新 更多