2012-01-14 72 views
12

Tôi đang chụp ảnh trong thiết bị Samsung Galaxy SII của tôi từ mã. Sau khi lưu và hiển thị nó trên màn hình, tôi thấy nó được xoay 90 độ.Android xoay ảnh 90 độ (chụp bằng máy ảnh)

Tôi hiểu đó là một số vấn đề về thiết bị - nó không xảy ra trên tất cả các thiết bị.

Tôi đang chụp ảnh bằng cách sử dụng ý định máy ảnh đã cho và lưu nó trong hàm onActivityResult.

Tôi nhìn xung quanh nhưng không tìm thấy giải pháp vững chắc cho việc này.

Bất kỳ ý tưởng nào có thể tìm thấy sự cố và chỉ xoay lại vấn đề trên các thiết bị "có vấn đề"?

Trả lời

8

Đây là lỗi dựa trên các cài đặt của nhà sản xuất khác nhau. Một số điện thoại xoay chúng, một số thì không. xem các liên kết, đó là vấn đề # 1193

http://code.google.com/p/android/issues/detail?id=1193

+0

Vì vậy, theo như tôi thấy - tôi phải yêu cầu chế độ phong cảnh từ máy ảnh? Có cách nào để tìm hiểu bằng cách nào đó nếu thiết bị ứng dụng đang chạy đang chuyển nó? hoặc tôi nên làm cho tất cả các thiết bị sử dụng chế độ phong cảnh và chặn chân dung (mà không phải là một giải pháp tốt đẹp) – user1136875

+1

Tôi đã không tìm ra một phần bản thân mình. Cá nhân tôi sẽ thử http://developer.android.com/guide/topics/media/camera.html#custom-camera và xem điều đó có tạo nên sự khác biệt hay không. –

+0

Nếu bạn sẽ tìm ra - hãy cho tôi biết :) – user1136875

-2

Tôi đoán nó có thể là vấn đề của cảm biến định hướng của bạn .. Bạn có xử lý giá trị cảm biến trong chương trình của mình hay không .. để biết khi nào người dùng đã chụp ảnh thiết bị ở hướng ngang hoặc dọc ..

+2

không thể dựa vào nó - vì nó hoạt động tốt trên một số thiết bị và không phải trên khác – user1136875

4

Vượt qua đường dẫn tập tin đó được chụp từ máy ảnh

public Bitmap rotateBitmapOrientation(String photoFilePath) { 

    // Create and configure BitmapFactory 
    BitmapFactory.Options bounds = new BitmapFactory.Options(); 
    bounds.inJustDecodeBounds = true; 
    BitmapFactory.decodeFile(file, bounds); 
    BitmapFactory.Options opts = new BitmapFactory.Options(); 
    Bitmap bm = BitmapFactory.decodeFile(file, opts); 
    // Read EXIF Data 
    ExifInterface exif = new ExifInterface(file); 
    String orientString = exif.getAttribute(ExifInterface.TAG_ORIENTATION); 
    int orientation = orientString != null ? Integer.parseInt(orientString) : ExifInterface.ORIENTATION_NORMAL; 
    int rotationAngle = 0; 
    if (orientation == ExifInterface.ORIENTATION_ROTATE_90) rotationAngle = 90; 
    if (orientation == ExifInterface.ORIENTATION_ROTATE_180) rotationAngle = 180; 
    if (orientation == ExifInterface.ORIENTATION_ROTATE_270) rotationAngle = 270; 
    // Rotate Bitmap 
    Matrix matrix = new Matrix(); 
    matrix.setRotate(rotationAngle, (float) bm.getWidth()/2, (float) bm.getHeight()/2); 
    Bitmap rotatedBitmap = Bitmap.createBitmap(bm, 0, 0, bounds.outWidth, bounds.outHeight, matrix, true); 
    // Return result 
    return rotatedBitmap; 
} 
Các vấn đề liên quan