Android SDK Nexus的本机摄像头问题
我正在开发一款使用安卓原生摄像头的应用程序。我可以成功拍摄照片,并在ImageView上存储和显示。我正在测试HTC desire Z、Nexus S和摩托罗拉Zoom。除了Nexus S上的一个问题外,它适用于所有三种设备。当我使用Nexus S拍照时,预览图像已旋转90度 您能告诉我如何解决这个问题吗? 我的代码:Android SDK Nexus的本机摄像头问题,android,orientation,android-camera,nexus-s,android-camera-intent,Android,Orientation,Android Camera,Nexus S,Android Camera Intent,我正在开发一款使用安卓原生摄像头的应用程序。我可以成功拍摄照片,并在ImageView上存储和显示。我正在测试HTC desire Z、Nexus S和摩托罗拉Zoom。除了Nexus S上的一个问题外,它适用于所有三种设备。当我使用Nexus S拍照时,预览图像已旋转90度 您能告诉我如何解决这个问题吗? 我的代码: public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceSta
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);
}
}
我得到了他的帮助
非常感谢
有人吗?有些手机出现预览问题。我知道的唯一简单的解决方法是在onCreate()中设置横向模式:
另一种可能(可能是过度)是将另一个曲面覆盖在预览曲面的顶部,创建自定义预览回调,并将每个帧手动旋转并绘制到此曲面,但在性能和屏幕大小方面存在问题。此预览问题发生在某些手机上。我知道的唯一简单的解决方法是在onCreate()中设置横向模式:
另一种可能(可能是过度)是将另一个曲面覆盖在预览曲面的顶部,创建自定义的PreviewCallback并旋转并手动将每个帧绘制到此曲面,但性能和屏幕大小存在问题。以下函数将检测图像的方向
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类可以在中找到
请记住,这只会更正图像预览的方向。
我希望这将对您有所帮助。以下功能将检测图像的方向
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类可以在中找到
请记住,这只会更正图像预览的方向。
我希望这将对您有所帮助。如果您创建自己的相机界面,这将起作用。如果您使用的是本机相机,则此功能不起作用。我找到了解决办法。我以后再发。Cheers@Chinthaka你可以在这里发布一个解决方案吗?如果你创建了自己的相机界面,这个方法就行了。如果您使用的是本机相机,则此功能不起作用。我找到了解决办法。我以后再发。Cheers@Chinthaka你可以在这里发布解决方案吗?
if(degree != 0){
bmp = Util.rotate(bmp, degree);
}