を呼び出さないと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){
}
}
}
}