不调用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){
}
}
}
}