在Android Camera中旋转和更改图像的大小

时间:2015-03-28 12:14:09

标签: android camera

我是Android开发的新手,最近,我用android制作了一个简单的相机应用程序,但我遇到了无法解决的问题。首先,我将预览屏幕旋转到90度,以便表面视图处于纵向模式。我使用过以下代码。

public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
    if(mCamera != null) {
        Camera.Parameters parameters = mCamera.getParameters();
        parameters.setPreviewSize(mPreviewSize.width, mPreviewSize.height);
        requestLayout();
        mCamera.setDisplayOrientation(90);
        mCamera.setParameters(parameters);
        mCamera.startPreview();
    }

但问题并未解决。在我拍摄并检查文件夹中的图像后,我用我的应用程序拍摄的jpg图像水平保存,分辨率不佳。

我不确定如何清楚地解释它,但我想要做的是改变图像大小并将其保存为纵向模式。 保存图像的代码与下面的示例类似,但我不确定在保存之前如何以及在何处可以更改大小和旋转。对不起,我的英语不好。如果我可以为新手提供一些明确的提示,那就太好了。

private class SaveImageTask extends AsyncTask<byte[], Void, Void> {

    @Override
            protected Void doInBackground(byte[]... data) {
                FileOutputStream outStream = null;

                // Write to SD Card
                try {
                    File sdCard = Environment.getExternalStorageDirectory();
                    File dir = new File (sdCard.getAbsolutePath() + "/camtest");
                    dir.mkdirs();               

                    String fileName = String.format("%d.jpg", System.currentTimeMillis());
                    File outFile = new File(dir, fileName);

                    outStream = new FileOutputStream(outFile);
                    outStream.write(data[0]);
                    outStream.flush();
                    outStream.close();

是否可以在PictureCallback中旋转数据?

PictureCallback jpegCallback = new PictureCallback() {
        public void onPictureTaken(byte[] data, Camera camera) {
            //change the rotarion 

            new SaveImageTask().execute(data);
            resetCam();
            Log.d(TAG, "onPictureTaken - jpeg");
        }
    };

0 个答案:

没有答案