1

不调用parameters.setRotation(),pictureCallback保存的图片方向与屏幕预览不一样,所以我添加了行parameters.setRotation(90)测试,添加此行后,保存图片的方向是正确的,在我的Nexus One中没有任何问题。

在 Galaxy Nexus 中,方向也是正确的,但图片中的所有内容都比它们现在的样子又薄又高,我注意到结果不一致,有时甚至比其他时候更薄和更高,甚至传递给的图片尺寸parameters.setPictureSize()也没有改变。谁能帮我解决这个问题?

最近我请一些朋友测试代码,问题似乎只出现在 Galaxy Nexus 中。

Camera.Parameters parameters = camera.getParameters();
parameters.setPreviewSize(previewWidth, previewHeight);
parameters.setPictureSize(pictureWidth, pictureHeight);
parameters.setRotation(90);
camera.setParameters(parameters);
camera.startPreview();
camera.takePicture(shutterCallback, null, null, pictureCallback);

下面是 PictureCallback 中 takePicture() 的代码:

public void onPictureTaken(byte[] data, Camera camera) {
    pictureFile = getOutputMediaFile(MEDIA_TYPE_IMAGE);
    errorMessage = null;//reset to null first
    if (pictureFile == null){
        Log.d(TAG, "Error creating media file, check storage permissions: "+e.getMessage());
        errorMessage = "Failed to create media file, storage not available!";
    }else{
        FileOutputStream fos = null;
        try {
            fos = new FileOutputStream(pictureFile);
            fos.write(data);
            fos.flush();
        } catch (FileNotFoundException ex) {
            Log.d(TAG, "File not found: " + e.getMessage());
            ex.printStackTrace();
            errorMessage = "Failed to create media file!";
        } catch (IOException ex) {
            Log.d(TAG, "Error accessing file: " + e.getMessage());
            errorMessage ="Error while writing media file!";
        }finally{
            try{
                if(fos!=null){
                    fos.close();
                }
            }catch(Exception ex){
            }
        }
    }
}
4

0 回答 0