1

を呼び出さないとparameters.setRotation()、pictureCallbackによって保存された画像の方向が画面上のプレビューと同じではないためparameters.setRotation(90)、テスト用の行を追加します。この行を追加した後、保存された画像の方向は正しく、NexusOneでは問題ありません。

Galaxy Nexusでは、方向も正しいですが、画像のすべてが実際よりも薄くて背が高いため、結果に一貫性がなく、渡された画像のサイズをparameters.setPictureSize()変更しなくても、他の場合よりも薄くて背が高くなることがあります。誰かが私が問題を解決するのを手伝ってくれる?

最近、友達にコードをテストしてもらいました。問題はGalaxyNexusでのみ発生するようです。

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