android – setRotation(90)以纵向模式拍摄照片不能在三星设备上工作

根据文档,setRotation(90)应该旋转捕获的J​​PEG图片(takePicture在横向模式。

这在HTC手机上正常工作,但不适用于三星Google Nexus S和三星Galaxy S3。这是一个错误?

我知道我可以使用矩阵变换旋转,但希望操作系统可以更有效地做到这一点,并且不想冒其他设备上的过度旋转。

编辑

设置camera.setDisplayOrientation(90);使预览处于纵向模式,但它对拍摄的照片没有任何影响。

此外,除了setRotation,我也试图设置图片大小 – 我翻转h与w:parameters.setPictureSize(1200,1600);。这也没有任何影响。

显然三星手机设置EXIF方向标记,而不是旋转单个像素。正如ariefbayu建议,使用BitmapFactory读取位图不支持此标记。他的代码示例是解决方案,并且此解决方案也与使用inSampleSize兼容。

我试着回答这个关于Exif标签。这是我做的:

Bitmap realImage = BitmapFactory.decodeStream(stream);

ExifInterface exif=new ExifInterface(getRealPathFromURI(imagePath));

Log.d("EXIF value", exif.getAttribute(ExifInterface.TAG_ORIENTATION));
if(exif.getAttribute(ExifInterface.TAG_ORIENTATION).equalsIgnoreCase("6")){

    realImage=ImageUtil.rotate(realImage, 90);
}else if(exif.getAttribute(ExifInterface.TAG_ORIENTATION).equalsIgnoreCase("8")){
    realImage=ImageUtil.rotate(realImage, 270);
}else if(exif.getAttribute(ExifInterface.TAG_ORIENTATION).equalsIgnoreCase("3")){
    realImage=ImageUtil.rotate(realImage, 180);
}

ImageUtil.rotate():

public static Bitmap rotate(Bitmap bitmap, int degree) {
    int w = bitmap.getWidth();
    int h = bitmap.getHeight();

    Matrix mtx = new Matrix();
    mtx.postRotate(degree);

    return Bitmap.createBitmap(bitmap, 0, 0, w, h, mtx, true);
}
http://stackoverflow.com/questions/11023696/setrotation90-to-take-picture-in-portrait-mode-does-not-work-on-samsung-device

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:android – setRotation(90)以纵向模式拍摄照片不能在三星设备上工作