1. 程式人生 > >關於自定義相機照片橫豎屏轉換問題的解決

關於自定義相機照片橫豎屏轉換問題的解決

在自定義相機中,橫豎屏拍照時,其顯示的圖片與預覽的時候方向不一致,有以下2種方法:
第一種:比較普遍,

                /** 
                 * 獲取圖片的旋轉角度,有些系統把拍照的圖片旋轉了,有的沒有旋轉 
                 */ 
                int degree = readPictureDegree(f.getAbsolutePath());  

                BitmapFactory.Options opts=new BitmapFactory.Options();//獲取縮圖顯示到螢幕上
opts.inSampleSize=2; Bitmap cbitmap=BitmapFactory.decodeFile(f.getAbsolutePath(),opts); /** * 把圖片旋轉為正的方向 */ Bitmap newbitmap = rotaingImageView(degree, cbitmap); iv.setImageBitmap(newbitmap);

當然,在第一種的基礎上,如果獲取的degree一直為0,但照片角度還不對時,就要用到第二種方法:

//監聽螢幕的方向
mScreenOrientationEventListener=new OrientationEventListener(this) {

            @Override
            public void onOrientationChanged(int orientation) {
                // TODO Auto-generated method stub
                // i的範圍是0~359  
                // 螢幕左邊在頂部的時候 i = 90;  
// 螢幕頂部在底部的時候 i = 180; // 螢幕右邊在底部的時候 i = 270; // 正常情況預設i = 0; if(45 <= orientation && orientation < 135) { screen = ExifInterface.ORIENTATION_ROTATE_180; } else if(135 <= orientation && orientation < 225) { screen = ExifInterface.ORIENTATION_ROTATE_270; } else if(225 <= orientation && orientation < 315) { screen = ExifInterface.ORIENTATION_NORMAL; } else { screen = ExifInterface.ORIENTATION_ROTATE_90; } } };
holder.addCallback(new SurfaceHolder.Callback() {
                @Override
                public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
                    if (camera != null) {
                        Camera.Parameters parameters = camera.getParameters();
                        /* 設定相片格式為JPEG */
                        parameters.setPictureFormat(PixelFormat.JPEG);

                        switch (screen) {
                        case 0:
                            parameters.setRotation(90);
                            break;
                        case 90:
                            parameters.setRotation(0);
                            break;
                        case 180:
                            parameters.setRotation(270);
                            break;
                        case 270:
                            parameters.setRotation(180);
                            break;
                        default:
                            break;
                        }   
                        switch (screen) {
                        case 0:
                            camera.setDisplayOrientation(90);
                            break;
                        case 90:
                            camera.setDisplayOrientation(0);
                            break;
                        case 180:
                            camera.setDisplayOrientation(270);
                            break;
                        case 270:
                            camera.setDisplayOrientation(180);
                            break;
                        default:
                            break;
                        }

                        camera.startPreview();
                    }
                }

                @SuppressLint("NewApi")
                @Override
                public void surfaceCreated(SurfaceHolder holder) {

                    try {
                        camera = Camera.open();
                        // 設定camera預覽的角度,因為預設圖片是傾斜90度的
                        camera.setDisplayOrientation(90);
                        // 設定holder主要是用於surfaceView的圖片的實時預覽,以及獲取圖片等功能
                        camera.setPreviewDisplay(holder);
                    } catch (Exception e) {
                        if (camera != null) {
                            camera.release();
                            camera = null;
                        }
                        e.printStackTrace();
                    }
                }

                @Override
                public void surfaceDestroyed(SurfaceHolder holder) {
                    if (camera != null) {
                        camera.stopPreview();
                        camera.release();
                        camera = null;
                    }
                }
            });

通過以上方法,自定義相機圖片旋轉類似的問題基本都可以解決
有問題歡迎交流 QQ 2240405944