我正在使用Android原生相机开发应用程序。我可以成功拍摄照片并在ImageView上存储和显示。我正在测试HTC欲望Z,Nexus S和Motorola Zoom。除了Nexus S上的一个问题外,它适用于所有三个设备。当我使用Nexus S拍摄照片时,预览图像已旋转90度。
能告诉我如何解决这个问题吗?
我的代码:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.camera_preview);
imgTakenPhoto = (ImageView) findViewById(R.id.imageView);
getPhotoClick();
}
private File getTempFile()
{
return new File(Environment.getExternalStorageDirectory(), "image.tmp");
}
private void getPhotoClick()
{
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(getTempFile()));
startActivityForResult(intent, REQUEST_FROM_CAMERA);
}
InputStream is=null;
@Override
protected void onActivityResult(int requestcode, int resultCode, Intent data){
if (requestcode == REQUEST_FROM_CAMERA && resultCode == RESULT_OK) {
File file=getTempFile();
try {
is=new FileInputStream(file);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
if(is==null){
try {
Uri u = data.getData();
is=getContentResolver().openInputStream(u);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
Bitmap thumbnail = BitmapFactory.decodeStream(is);
imgTakenPhoto.setImageBitmap(thumbnail);
}
}
我已从Problems saving a photo to a file
获得帮助非常感谢
有人请吗?
答案 0 :(得分:1)
预览发生在某些手机上的问题。我所知道的唯一简单的解决方法是在onCreate()中设置横向模式:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
另一种(可能是矫枉过正的)可能性是在预览表面上覆盖另一个表面,创建自定义PreviewCallback并手动旋转并绘制每个帧到此表面,但性能和屏幕尺寸存在问题。
答案 1 :(得分:0)
以下功能将检测图像的方向。
public static int getExifOrientation(String filepath) {
int degree = 0;
ExifInterface exif = null;
try {
exif = new ExifInterface(filepath);
} catch (IOException ex) {
Log.e(TAG, "cannot read exif", ex);
}
if (exif != null) {
int orientation = exif.getAttributeInt(
ExifInterface.TAG_ORIENTATION, -1);
if (orientation != -1) {
switch(orientation) {
case ExifInterface.ORIENTATION_ROTATE_90:
degree = 90;
break;
case ExifInterface.ORIENTATION_ROTATE_180:
degree = 180;
break;
case ExifInterface.ORIENTATION_ROTATE_270:
degree = 270;
break;
}
}
}
在您的代码上,使用此功能旋转位图图像。 Util类可以在https://android.googlesource.com/platform/packages/apps/Camera.git
中找到if(degree != 0){
bmp = Util.rotate(bmp, degree);
}
请记住,这只会更正图像预览的方向。 我希望这会对你有所帮助。