如何在sumsung设备中使用android设置捕获的图像是纵向模式

时间:2016-03-25 07:14:39

标签: android android-camera portrait

我正在尝试下面的代码使用android在sumsung设备中设置捕获的图像是纵向模式,但它设置为横向模式。下面的代码适用于三星和索尼的其他设备。

Matrix mat = new Matrix();
ExifInterface exif = new ExifInterface(yourimagepath);
String orientstring = exif.getAttribute(ExifInterface.TAG_ORIENTATION);
int orientation = orientstring != null ? Integer.parseInt(orientstring) : ExifInterface.ORIENTATION_NORMAL;
int rotateangle = 0;
if(orientation == ExifInterface.ORIENTATION_ROTATE_90) 
            rotateangle = 90;
if(orientation == ExifInterface.ORIENTATION_ROTATE_180) 
            rotateangle = 180;
if(orientation == ExifInterface.ORIENTATION_ROTATE_270) 
            rotateangle = 270;

mat.setRotate(rotateangle, (float) bmpPic.getWidth() / 2, (float) bmpPic.getHeight() / 2);

File f = new File(yourimagepath);       
Bitmap bmpPic = BitmapFactory.decodeStream(new FileInputStream(f), null, null); 
Bitmap bmpPic1 = Bitmap.createBitmap(bmpPic, 0, 0, bmpPic.getWidth(), bmpPic.getHeight(), mat, true); 

还有其他解决办法吗?请建议。

3 个答案:

答案 0 :(得分:1)

在活动代码中的清单文件中使用此功能。

机器人:screenOrientation = “纵向”

可以为所有设备设置纵向模式。

答案 1 :(得分:1)

使用ExifInterface检查存储在设备中的图像方向。

int rotate = 0;
try {
    File imageFile = new File(uploadFile.getPath());
    ExifInterface exif = new ExifInterface(
            imageFile.getAbsolutePath());
    int orientation = exif.getAttributeInt(
            ExifInterface.TAG_ORIENTATION,
            ExifInterface.ORIENTATION_NORMAL);

    switch (orientation) {
        case ExifInterface.ORIENTATION_ROTATE_270:
            rotate = 270;
            break;
        case ExifInterface.ORIENTATION_ROTATE_180:
            rotate = 180;
            break;
        case ExifInterface.ORIENTATION_ROTATE_90:
            rotate = 90;
            break;
    }
} catch (IOException e) {
    e.printStackTrace();
}

然后使用矩阵将位图旋转到存储在设备中的实际纵向或横向。

Matrix matrix = new Matrix();

matrix.postRotate(rotate);

BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = false;
options.inPreferredConfig = Bitmap.Config.RGB_565;
options.inDither = true;

Bitmap bmp = BitmapFactory.decodeFile(uploadFile.getPath(), options);

Bitmap scaledBitmap = Bitmap.createScaledBitmap(bmp, bmp.getWidth(), bmp.getHeight(), true);

Bitmap rotatedBitmap = Bitmap.createBitmap(scaledBitmap, 0, 0, scaledBitmap.getWidth(), scaledBitmap.getHeight(), matrix, true);

rotateBitmap是具有正确方向的位图。

希望它有所帮助。

答案 2 :(得分:0)

试试这段代码。我在不同的手机上使用它包括三星,它完美地工作:

public Bitmap rotateImage(Bitmap bitmap) throws IOException {
        //Rotate the image to get in correct position
        ExifInterface exif = new ExifInterface(mImagePath);
        int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, 1);
        Matrix matrix = new Matrix();
        if (orientation == 6) {
            matrix.postRotate(90);
        } else if (orientation == 8) {
            matrix.postRotate(270);
        } else if (orientation == 3) {
            matrix.postRotate(180);
        }

        Bitmap rotatedImage = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
        return rotatedImage;
    }

希望它有所帮助!