Poor picture quality from Custom Camera
当前我正在使用自定义相机应用程序,预览看起来还不错。但是,当我拍摄照片并将其显示在其他活动中时,照片却减少了80%。有人知道为什么会这样吗?同样在画廊里,质量很差。
我正在使用android的Camera API演示。
我的参数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { parameters = mCamera.getParameters(); parameters.setPreviewSize(mPreviewSize.width, mPreviewSize.height); parameters.setFlashMode(Parameters.FLASH_MODE_AUTO); parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE); parameters.setJpegQuality(100); parameters.setPreviewSize(mPreviewSize.width, mPreviewSize.height); parameters.setRotation(90); Display display = ((WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); if (display.getRotation() == Surface.ROTATION_0) { mCamera.setDisplayOrientation(90); } else if (display.getRotation() == Surface.ROTATION_270) { mCamera.setDisplayOrientation(180); } mCamera.setParameters(parameters); mCamera.startPreview(); } |
代码保存图像:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | private PictureCallback mPicture = new PictureCallback() { private String TAG ="DocsPro"; @Override public void onPictureTaken(byte[] data, Camera camera) { File pictureFile = getOutputMediaFile(MEDIA_TYPE_IMAGE); if (pictureFile == null) { Log.d(TAG,"Error creating media file, check storage permissions : PICTURE FILE IS NULL"); return; } try { FileOutputStream fos = new FileOutputStream(pictureFile); fos.write(data); fos.close(); String filepath = pictureFile.getAbsolutePath(); Intent edit = new Intent(TakePhoto.this, EditPhoto.class); edit.putExtra("filepath", filepath); startActivity(edit); finish(); } catch (FileNotFoundException e) { Log.d(TAG,"File not found:" + e.getMessage()); } catch (IOException e) { Log.d(TAG,"Error accessing file:" + e.getMessage()); } } }; private static File getOutputMediaFile(int type) { // To be safe, you should check that the SDCard is mounted // using Environment.getExternalStorageState() before doing this. File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_PICTURES),"DocsPro"); // This location works best if you want the created images to be shared // between applications and persist after your app has been uninstalled. // Create the storage directory if it does not exist if (!mediaStorageDir.exists()) { if (!mediaStorageDir.mkdirs()) { Log.d("MyCameraApp","failed to create directory"); return null; } } // Create a media file name String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); File mediaFile; if (type == MEDIA_TYPE_IMAGE) { mediaFile = new File(mediaStorageDir.getPath() + File.separator + "IMG_" + timeStamp +".jpg"); } else { return null; } return mediaFile; } |
已解决的问题:
我只是将其放在预览类中更改的表面。
1 2 3 4 5 6 7 8 | List<Camera.Size> sizes = parameters.getSupportedPictureSizes(); Camera.Size size = sizes.get(0); for(int i=0;i<sizes.size();i++) { if(sizes.get(i).width > size.width) size = sizes.get(i); } parameters.setPictureSize(size.width, size.height); |
然后只是调整位图的大小,因为图片太大了:
1 2 3 4 | imageView = (ImageView) findViewById(R.id.Image); Bitmap bp = BitmapFactory.decodeFile(imagePath); Bitmap resized = Bitmap.createScaledBitmap(bp,(int)(bp.getWidth()*0.7), (int)(bp.getHeight()*0.7), true); imageView.setImageBitmap(resized); |