相关疑难解决方法(0)

为什么在Android上的某些设备上使用相机意图捕获的图像会被旋转?

我正在捕捉图像并将其设置为图像视图.

public void captureImage() {

    Intent intentCamera = new Intent("android.media.action.IMAGE_CAPTURE");
    File filePhoto = new File(Environment.getExternalStorageDirectory(), "Pic.jpg");
    imageUri = Uri.fromFile(filePhoto);
    MyApplicationGlobal.imageUri = imageUri.getPath();
    intentCamera.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
    startActivityForResult(intentCamera, TAKE_PICTURE);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intentFromCamera) {
    super.onActivityResult(requestCode, resultCode, intentFromCamera);

    if (resultCode == RESULT_OK && requestCode == TAKE_PICTURE) {

        if (intentFromCamera != null) {
            Bundle extras = intentFromCamera.getExtras();
            if (extras.containsKey("data")) {
                bitmap = (Bitmap) extras.get("data");
            }
            else {
                bitmap = getBitmapFromUri();
            }
        }
        else {
            bitmap = getBitmapFromUri();
        }
        // …
Run Code Online (Sandbox Code Playgroud)

camera android image rotation android-camera-intent

344
推荐指数
11
解决办法
19万
查看次数

Android中的相机方向问题

我正在构建一个使用相机拍照的应用程序.这是我的源代码:

        File file = new File(Environment.getExternalStorageDirectory(),
            imageFileName);
    imageFilePath = file.getPath();
    Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
    //Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));
    startActivityForResult(intent, ACTIVITY_NATIVE_CAMERA_AQUIRE);
Run Code Online (Sandbox Code Playgroud)

onActivityResult()方法上,我BitmapFactory.decodeStream()用来拾取图像.

当我在Nexus上运行我的应用程序时,它运行良好.但是当我在三星Galaxy S或HTC Inspire 4G上运行时,图像的方向是不正确的.

  • 使用纵向模式拍摄时,真实图像(保存在SD卡上)始终旋转90度.

拍摄后的图像预览 SD卡上的真实图像

拍摄后的图像预览--------- SD卡上的真实图像

  • 用横向模式捕捉,一切都很好.

拍摄后的图像预览 SD卡上的真实图像

拍摄后的图像预览--------- SD卡上的真实图像

android orientation android-camera-intent

100
推荐指数
5
解决办法
7万
查看次数

Android图像调整大小和保留EXIF数据(方向,旋转等)

如果您的Android应用使用设备的相机拍照,然后调整它的大小(这是很常见的,以减少上传大小),你可能没有意识到,这个调整操作的EXIF元数据.

这可能会导致问题,尤其是当相关设备依赖"方向"标签正确显示图像时.

不同的Android设备以不同的方式处理相机/图像旋转 - 我信赖的'Nexus One似乎总是在捕获后立即旋转图像,因此文件的本机内容在查看时始终是"直立的".然而,其他设备(特别是我测试中的三星手机)不会旋转图像文件的内容 - 而是设置exif'Orientation'标签.无论何时稍后显示图像,相关图像代码都应检测到方向"标签"的存在并适当地旋转图像.但是如果您对图像进行了任何位图处理并将其保存到新文件中,那么所有exif数据都将丢失.

除了Orientation数据之外,您还可能会丢失其他有价值的元数据,例如品牌/型号等.

这使我困惑了几个星期(图像在电话库中显示时显示正常,但随后到达我的服务器时方向错误且没有明显的元数据).我在这里添加这个自我提问来帮助别人.这篇博客文章非常有用:

http://vikaskanani.wordpress.com/2011/07/17/android-re-size-image-without-loosing-exif-information/

android exif image android-camera

49
推荐指数
3
解决办法
2万
查看次数

对于使用肖像相机应用程序android拍摄的图像,EXIF方向标记值始终为0

我有一个纵向模式的相机应用程序,它从前端和后端相机拍摄照片.我将图像保存在我的SD卡中并尝试找到相应的exif值,它总是给出0.但是我得到了预期的exif方向存储在设备中的其他图像的值(如下载的图片).

我怎样才能解决这个问题 ?谁能帮我吗 ?

这是用于保存图片和查找方向的代码

PictureCallback myPictureCallback_JPG = new PictureCallback() {

    @Override
    public void onPictureTaken(byte[] arg0, Camera arg1) {
        // TODO Auto-generated method stub


                try {
                    File APP_FILE_PATH = new File(Environment.getExternalStorageDirectory()
                            .getPath() + "/Myapp/");
                    if (!APP_FILE_PATH.exists()) {
                        APP_FILE_PATH.mkdirs();
                    }
                    File file = new File(APP_FILE_PATH, "image.jpg");

                    FileOutputStream fos = new FileOutputStream(file);
                    fos.write(arg0);
                    fos.close();
imageFileUri=Uri.fromfile(file);                           getApplicationContext().getContentResolver().notifyChange(
                          imageFileUri, null);
                sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,
                            Uri.parse("file://"
                                    + Environment.getExternalStorageDirectory())));
                    ExifInterface exif = new ExifInterface(file.getAbsolutePath());
                    int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);



                } catch (Exception e) {

                }



    }
};
Run Code Online (Sandbox Code Playgroud)

以下是surphace创建和更改函数的代码 …

android android-camera android-orientation

38
推荐指数
1
解决办法
3万
查看次数

35
推荐指数
2
解决办法
7万
查看次数

来自画廊/相机意图的图片方向

我从相机/画廊意图到我的应用程序的照片.在许多手机中,我从意图/ Uri中读取的图片已经旋转到正确的方向.例如N1,Legend,Desire就是这种情况.

但是在某些手机上(例如Milestone1,GalaxyS),无论拍摄图片的方式如何,图片总是在风景中.这意味着在我的应用程序中,纵向图片以错误的方式呈现给用户.我试图读取图片的EXIF信息,但方向标记始终为0.必须有一种方法可以找到图片的正确方向,因为在Milestone1中,图库应用程序正确显示肖像图片.

我如何知道在向用户展示之前是否需要自己旋转图片?

谢谢你的帮助!

android image orientation

32
推荐指数
3
解决办法
3万
查看次数

Exif数据TAG_ORIENTATION始终为0

我需要知道图库中图像的方向(由相机拍摄).我最初的方法是使用适用于我的Droid 1的MediaStore.Images.Media.ORIENTATION.在HTC Thunderbolt上测试时,手机只能将0保存到该字段.

然后我开始阅读exif数据:

 ExifInterface exifReader = new ExifInterface(mFilePath);
 exifReader.getAttributeInt(ExifInterface.TAG_ORIENTATION, -1);
Run Code Online (Sandbox Code Playgroud)

这也为每个图像返回0.任何人都有关于如何正确获取Android照片的方向的想法?

camera android exif photo orientation

24
推荐指数
2
解决办法
3万
查看次数

Android的CameraInfo.orientation是否正确记录?错误地实施了?

在Android中,您可以Camera通过检索a来获取a 的属性的描述CameraInfo.我对方向很感兴趣,如http://developer.android.com/reference/android/hardware/Camera.CameraInfo.html#orientation所述.

然而,文档似乎与我的所有四个设备的行为方式不一致,而且,我有第五个设备的消息,这个设备看起来固定不变.

特别是,文档说:

该值是摄像机图像需要顺时针旋转的角度,因此它在显示屏上以其自然方向正确显示....例如,假设设备具有自然高的屏幕.后置摄像头传感器安装在横向上.你在看屏幕.如果相机传感器的顶部以自然方向与屏幕的右边缘对齐,则值应为90.如果前置摄像头传感器的顶部与屏幕右侧对齐,则值应为是270.

但在所述示例中,相机图像相对于自然高的方向顺时针旋转90度,而不是相反.也就是说,顶部与设备右侧对齐的图像需要顺时针旋转270度才能与设备的顶部对齐.

至少,我的所有四个设备都会为此值报告"90",并且当保持在自然方向时,所有设备的行为都好像相机的顶部是设备的右侧.也就是说,图像必须顺时针旋转270度,而不是90度,以匹配自然方向.这个例子似乎是对的; 第一行没有.

这个示例代码似乎支持我的结论,因为它只在方向被解释为上面时才给出正确的结果.

奇怪的是,我有来自一个用户设备的记录证据,显示它有时报告该值为90,其他时间报告为0!它应该是相机如何坐在设备中的物理属性,对吧?

  1. 任何人都可以确认文档的第一行实际上是错误的,这个例子是对的吗?
  2. 有没有人观察到价值的变化CameraInfo.orientation?在文档中是否有证据证明这是合法行为,或者它可能是设备中的错误?
  3. 任何其他相关的评论,经验,陷阱我还没有遇到过?

camera android orientation

24
推荐指数
2
解决办法
1万
查看次数

在三星Galaxy S上以肖像模式"拍照并呈现"

我想简单地拍一张照片并用我的三星galaxy s在ImageView中呈现它.当我在风景上而不是在肖像上做它时工作正常.我没有得到任何错误或异常 - 只是没有得到任何东西......有很多关于这个主题的问题,它似乎有问题(关于相机方向的东西),但不能找出一个简单的最终解决方案"拍照并呈现"代码.这是我的(有问题的)代码不起作用:

private void setUpListeners() {
    takePicture.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View arg0) {
            Intent cameraIntent = new Intent(
                    android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
            startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST);
        }
    });
}

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK) {
        if (requestCode == CAMERA_PIC_REQUEST) {
            Log.d("onActivityResult", "CAMERA_PIC_REQUEST returned");
            dishImage = (Bitmap) data.getExtras().get("data");
            if (dishImage==null)
                Log.d("onActivityResult", "dishImage==null");
            imageView = (ImageView) findViewById(R.id.dishinfodishimageview);
            imageView.setImageBitmap(dishImage);
            imageView.setVisibility(View.VISIBLE);
            takePicture.setVisibility(View.GONE);
            (new UploadImage()).execute(null);
        }
    } else {
        Log.e("onActivityResult",
                "no able to …
Run Code Online (Sandbox Code Playgroud)

android android-intent galaxy

8
推荐指数
1
解决办法
3480
查看次数

拍摄照片在三星手机中旋转90度

照片旋转90度,同时从三星移动其他手机(HTC)的相机捕捉其工作正常.请帮帮我.

Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, IMAGE_CAPTURE); 

@Override 
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {     
    super.onActivityResult(requestCode, resultCode, data);    
      try
    {
    if (requestCode == IMAGE_CAPTURE) {
       if (resultCode == RESULT_OK){

       Uri contentUri = data.getData();
       if(contentUri!=null)
       {
        String[] proj = { MediaStore.Images.Media.DATA };         
            Cursor cursor = managedQuery(contentUri, proj, null, null, null);         
        int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);         
        cursor.moveToFirst();         
        imageUri = Uri.parse(cursor.getString(column_index));
       }

       tempBitmap = (Bitmap) data.getExtras().get("data"); 
       mainImageView.setImageBitmap(tempBitmap);
       isCaptureFromCamera = true;
    }
 }
Run Code Online (Sandbox Code Playgroud)

android android-camera android-camera-intent

7
推荐指数
1
解决办法
1万
查看次数

从库中上传图像时无法获得方向

从我的库中选择图像时,我无法获得方向.如果我转到图像细节,我可以看到图像方向设置为90度.但是,我的方向始终为0.

String[] orientationColumn =  { MediaStore.Images.ImageColumns.ORIENTATION };
Cursor cur = managedQuery(data.getData(), orientationColumn, null, null, null);
int orientation = -1;

if (cur != null && cur.moveToFirst()) {
     orientation = cur.getInt(cur.getColumnIndex(orientationColumn[0]));
}
Run Code Online (Sandbox Code Playgroud)

使用ExitInterface:

ExifInterface exif = new ExifInterface(data.getData().getPath());
int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION);
Run Code Online (Sandbox Code Playgroud)

两种方式都返回0.我从库启动select活动,如下所示:

protected void selectFromLibrary() {
    Intent intent = new Intent(Intent.ACTION_PICK);
    intent.setAction(Intent.ACTION_GET_CONTENT);
    intent.setData(MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    intent.setType("image/*");
    startActivityForResult(intent,
            REQUEST_SELECT_IMAGE_FILE);
}
Run Code Online (Sandbox Code Playgroud)

这是在运行4.4.2的LG G2上

android image android-orientation

2
推荐指数
1
解决办法
548
查看次数