2012-01-14 14 views
12

मैं कोड से अपने सैमसंग गैलेक्सी एसआईआई डिवाइस में एक तस्वीर ले रहा हूं। स्क्रीन पर इसे सहेजने और प्रदर्शित करने के बाद मुझे लगता है कि यह 90 डिग्री से घूर्णन है।एंड्रॉइड 90 डिग्री (कैमरे द्वारा लिया गया) द्वारा चित्रों को घुमाता है

मुझे समझ में आया कि यह कुछ डिवाइस समस्या है - यह सभी उपकरणों पर नहीं होता है।

मैं तस्वीर को दिए गए कैमरे के इरादे को चित्रित कर रहा हूं और इसे एक्टिविटी रिसेट फ़ंक्शन में सहेज रहा हूं।

मैंने चारों ओर देखा लेकिन इसके लिए ठोस समाधान नहीं मिला।

कोई भी विचार समस्या को कैसे ढूंढ सकता है और इसे "समस्याग्रस्त" उपकरणों पर वापस घुमा सकता है?

उत्तर

8

यह विभिन्न निर्माताओं सेटिंग्स के आधार पर एक बग है। कुछ फोन उन्हें घुमाते हैं, कुछ नहीं करते हैं। लिंक को देखने के लिए, यह मुद्दा # 1193

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

+0

तो जहां तक ​​मैं देख सकता हूं - मुझे कैमरे से लैंडस्केप मोड का अनुरोध करना होगा? क्या किसी भी तरह से पता लगाने का कोई तरीका है कि जिस डिवाइस पर एप्लिकेशन चल रहा है, वह इसका अनुकरण कर रहा है? या क्या मुझे सभी डिवाइस लैंडस्केप मोड का उपयोग करना चाहिए और पोर्ट्रेट को अवरुद्ध करना चाहिए (जो एक अच्छा समाधान नहीं है) – user1136875

+1

मुझे उस भाग को स्वयं नहीं मिला है। मैं व्यक्तिगत रूप से http://developer.android.com/guide/topics/media/camera.html#custom-camera कोशिश कर रहा हूं और देख सकता हूं कि इससे कोई फर्क पड़ता है या नहीं। –

+0

यदि आप इसे समझ लेंगे - कृपया मुझे बताएं :) – user1136875

-2

मुझे लगता है कि यह आपके अभिविन्यास सेंसर की समस्या हो सकती है .. आप अपने कार्यक्रम में सेंसर मूल्य पर कार्रवाई करें .. पता करने के लिए जब उपयोगकर्ता तस्वीर डिवाइस क्षैतिज या लम्बवत अभिविन्यास में था ले लिया है ..

+2

इस पर निर्भर नहीं कर सकते - क्योंकि यह कुछ उपकरणों पर अच्छा काम करता है और दूसरे पर नहीं – user1136875

4

फ़ाइल पथ जो कैमरे से कब्जा कर लिया है दर्रा है

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; 
} 
संबंधित मुद्दे