Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/220.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android SDK Nexus的本机摄像头问题_Android_Orientation_Android Camera_Nexus S_Android Camera Intent - Fatal编程技术网

Android SDK Nexus的本机摄像头问题

Android SDK Nexus的本机摄像头问题,android,orientation,android-camera,nexus-s,android-camera-intent,Android,Orientation,Android Camera,Nexus S,Android Camera Intent,我正在开发一款使用安卓原生摄像头的应用程序。我可以成功拍摄照片,并在ImageView上存储和显示。我正在测试HTC desire Z、Nexus S和摩托罗拉Zoom。除了Nexus S上的一个问题外,它适用于所有三种设备。当我使用Nexus S拍照时,预览图像已旋转90度 您能告诉我如何解决这个问题吗? 我的代码: public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceSta

我正在开发一款使用安卓原生摄像头的应用程序。我可以成功拍摄照片,并在ImageView上存储和显示。我正在测试HTC desire Z、Nexus S和摩托罗拉Zoom。除了Nexus S上的一个问题外,它适用于所有三种设备。当我使用Nexus S拍照时,预览图像已旋转90度

您能告诉我如何解决这个问题吗?

我的代码:

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.camera_preview);
        imgTakenPhoto = (ImageView) findViewById(R.id.imageView);
        getPhotoClick();
    }
    private File getTempFile()
    {
        return new File(Environment.getExternalStorageDirectory(),  "image.tmp");
    }

    private void getPhotoClick()
    {
      Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
      intent.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(getTempFile()));
      startActivityForResult(intent, REQUEST_FROM_CAMERA);
    }

    InputStream is=null;

    @Override
    protected void onActivityResult(int requestcode, int resultCode, Intent data){
        if (requestcode == REQUEST_FROM_CAMERA && resultCode == RESULT_OK) {

            File file=getTempFile();

            try {
                is=new FileInputStream(file);

            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
            if(is==null){

                try {
                    Uri u = data.getData();
                    is=getContentResolver().openInputStream(u);
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                }
            }

            Bitmap thumbnail = BitmapFactory.decodeStream(is);
            imgTakenPhoto.setImageBitmap(thumbnail);

          }
    } 
我得到了他的帮助

非常感谢


有人吗?

有些手机出现预览问题。我知道的唯一简单的解决方法是在onCreate()中设置横向模式:


另一种可能(可能是过度)是将另一个曲面覆盖在预览曲面的顶部,创建自定义预览回调,并将每个帧手动旋转并绘制到此曲面,但在性能和屏幕大小方面存在问题。

此预览问题发生在某些手机上。我知道的唯一简单的解决方法是在onCreate()中设置横向模式:


另一种可能(可能是过度)是将另一个曲面覆盖在预览曲面的顶部,创建自定义的PreviewCallback并旋转并手动将每个帧绘制到此曲面,但性能和屏幕大小存在问题。

以下函数将检测图像的方向

public static int getExifOrientation(String filepath) {
        int degree = 0;
        ExifInterface exif = null;
        try {
            exif = new ExifInterface(filepath);
        } catch (IOException ex) {
            Log.e(TAG, "cannot read exif", ex);
        }
        if (exif != null) {
            int orientation = exif.getAttributeInt(
                ExifInterface.TAG_ORIENTATION, -1);
            if (orientation != -1) {                    
                switch(orientation) {
                    case ExifInterface.ORIENTATION_ROTATE_90:
                        degree = 90;
                        break;
                    case ExifInterface.ORIENTATION_ROTATE_180:
                        degree = 180;
                        break;
                    case ExifInterface.ORIENTATION_ROTATE_270:
                        degree = 270;
                        break;
             }
    }
}
在代码中,使用此函数旋转位图图像。Util类可以在中找到

请记住,这只会更正图像预览的方向。
我希望这将对您有所帮助。

以下功能将检测图像的方向

public static int getExifOrientation(String filepath) {
        int degree = 0;
        ExifInterface exif = null;
        try {
            exif = new ExifInterface(filepath);
        } catch (IOException ex) {
            Log.e(TAG, "cannot read exif", ex);
        }
        if (exif != null) {
            int orientation = exif.getAttributeInt(
                ExifInterface.TAG_ORIENTATION, -1);
            if (orientation != -1) {                    
                switch(orientation) {
                    case ExifInterface.ORIENTATION_ROTATE_90:
                        degree = 90;
                        break;
                    case ExifInterface.ORIENTATION_ROTATE_180:
                        degree = 180;
                        break;
                    case ExifInterface.ORIENTATION_ROTATE_270:
                        degree = 270;
                        break;
             }
    }
}
在代码中,使用此函数旋转位图图像。Util类可以在中找到

请记住,这只会更正图像预览的方向。
我希望这将对您有所帮助。

如果您创建自己的相机界面,这将起作用。如果您使用的是本机相机,则此功能不起作用。我找到了解决办法。我以后再发。Cheers@Chinthaka你可以在这里发布一个解决方案吗?如果你创建了自己的相机界面,这个方法就行了。如果您使用的是本机相机,则此功能不起作用。我找到了解决办法。我以后再发。Cheers@Chinthaka你可以在这里发布解决方案吗?
if(degree != 0){
  bmp = Util.rotate(bmp, degree);
}