2010-03-30 29 views
36

मैंने कैमरे के पूर्वावलोकन को SurfaceView पर पोर्ट्रेट में दिखाने के लिए कई चीजों की कोशिश की। कुछ भी काम नहीं किया। मैं एक Droid पर परीक्षण कर रहा हूं जिसमें 2.0.1 है। मैंने कोशिश की:पोर्ट्रेट पर एंड्रॉइड कैमरा SurfaceView

1) लेआउट मजबूर चित्र होने के लिए: this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

2)

Camera.Parameters parameters = camera.getParameters(); 
parameters.set("orientation", "portrait"); 
parameters.setRotation(90); 
camera.setParameters(parameters); 

का उपयोग कर वहाँ कुछ और मैं कोशिश कर सकता है? अगर यह एंड्रॉइड या फोन में एक बग है, तो मैं यह कैसे सुनिश्चित कर सकता हूं कि यह मामला है ताकि मेरे पास क्लाइंट को सूचित करने का सबूत हो?

धन्यवाद, प्रसन्ना

+0

एक नज़र - http://stackoverflow.com/questions/10259299/force-a-camera-to-always-open-in-portrait-mode-in-android/10259572#10259572 –

+0

कर सकते हैं किसी भी एक मदद http://stackoverflow.com/questions/28379130/how-to-set-camera-image-orientation –

उत्तर

2

G1 और Droid सहित कई वर्तमान उपकरणों, पर ऐसा करने के लिए कोई तरीका नहीं है। यहाँ प्रासंगिक बग रिपोर्ट पर एक नज़र डालें:

इसके अलावा एंड्रॉयड इंजीनियरों में से एक (डेव) से एक टिप्पणी को देखने के लिए यहाँ:

10

मेरे पास 2.1 (काम पर परीक्षण) में काम कर रहे पोर्ट्रेट मोड के लिए एक कामकाजी समाधान हो सकता है।

गतिविधि स्क्रीन अभिविन्यास चित्र पर सेट है। (एंड्रॉयड: screenOrientation = "चित्र")

कैमरा पैरामीटर:

Camera.Parameters पी = mCamera.getParameters();

p.set("jpeg-quality", 100); 
p.set("orientation", "landscape"); 
p.set("rotation", 90); 
p.setPictureFormat(PixelFormat.JPEG); 
p.setPreviewSize(h, w);// here w h are reversed 
mCamera.setParameters(p); 

और छवि चित्रित होगी।

कैमरे के लिए उपयोग किए जाने वाले सरफेसहोल्डर को फोन पूर्वावलोकन आकार सामान्य स्क्रीन रिज़ॉल्यूशन के साथ संगत आकार में होना चाहिए।

At surfaceCreated(..) or when you have this line 
camera = Camera.open(); 
     add 
camera.setDisplayOrientation(90);//only 2.2> 

Camera.Parameters p = camera.getParameters(); 
    p.set("jpeg-quality", 100); 
p.setRotation(90); 
p.setPictureFormat(PixelFormat.JPEG); 
p.setPreviewSize(h, w); 
camera.setParameters(p); 
0

लिंक रोमन मुद्दा धागे की दे दी है समस्या का समाधान है कि अब मैं उपयोग कर रहा हूँ है:

इच्छा 2.2 पर अजीब काम नहीं कर रहा ... यहाँ ठीक है।

इसे यहाँ खोजें: http://code.google.com/p/android/issues/detail?id=1193#c26

0

कोई जरूरत नहीं आप जब तक आप ऐसा करने के लिए स्पष्ट रूप से की जरूरत उन्मुखीकरण के लिए कोई पैरामीटर सेट करने के लिए नहीं है। डिफ़ॉल्ट रूप से, यह इस सुविधा का समर्थन करता है। मेरे मामले में, मेरे पास एक गतिविधि है और उस गतिविधि के ऊपर मेरे पास कैमरा दृश्य है, इसलिए मैंने कैमरे के गुणों के लिए कोई अभिविन्यास सेट नहीं किया है, इसके बजाय गतिविधि के लिए मैंने अभिविन्यास को मैनिफेस्ट फ़ाइल में पोर्ट्रेट के रूप में सेट किया है। अब ऐप दिखता है और अच्छा काम करता है। किसी के लिए उपयोगी हो सकता है ..

धन्यवाद।एपीआई के रूप में 8 LVL

61

, इस उपलब्ध है:

सार्वजनिक अंतिम शून्य setDisplayOrientation (int डिग्री)

यानी प्रकट में portait साथ:

public void surfaceCreated(SurfaceHolder holder) { 
    mCamera = Camera.open(); 
    mCamera.setDisplayOrientation(90); 
+12

मैंने यह किया है लेकिन बाइट [] मुझे अभी भी मुझे एक लैंडस्केप फोटो मिल रहा है। – tasomaniac

+3

सेट mCamera.setDisplayOrientation (9 0); कैमरा दृश्य ठीक है, लेकिन वीडियो परिणाम एक ही कैमरा दृश्य नहीं है, यह रोटेशन 90 नहीं है। क्यों? – mum

+0

अरे, आप इसके लिए param.setRotation (..) विधि का उपयोग कर सकते हैं। मैं अभी भी यह पता लगाने की कोशिश कर रहा हूं कि यह कैसे काम करता है। यह विस्मयकारी है! – sunlover3

10

आप इस कोशिश कर सकते हैं (अच्छा 2.2 या नीचे के लिए)। यहां मैं एसडी कार्ड में सहेजने से पहले छवि को घुमाता हूं। लेकिन यह केवल पोर्ट्रेट मोड के लिए है। यदि आपको इसे दोनों मोड के लिए बनाना था तो आपको कैमरा अभिविन्यास की जांच करनी चाहिए और छवि को कैप्चर करने से पहले कुछ चेक डालना चाहिए।

PictureCallback jpegCallback = new PictureCallback() { 
    public void onPictureTaken(byte[] data, Camera camera) { 
     FileOutputStream outStream = null; 
     try { 
     imageFilePath = getFilename(); 
     InputStream is = new ByteArrayInputStream(data); 
     Bitmap bmp = BitmapFactory.decodeStream(is); 
     // Getting width & height of the given image. 
     if (bmp != null){ 
      int w = bmp.getWidth(); 
      int h = bmp.getHeight(); 
      // Setting post rotate to 90 
      Matrix mtx = new Matrix(); 
      mtx.postRotate(90); 
      // Rotating Bitmap 
      Bitmap rotatedBMP = Bitmap.createBitmap(bmp, 0, 0, w, h, mtx, true); 
      ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
      rotatedBMP.compress(Bitmap.CompressFormat.PNG, 100, stream); 
      byte[] byteArray = stream.toByteArray(); 
      outStream = new FileOutputStream 
           (String.format(imageFilePath,System.currentTimeMillis())); 
      outStream.write(byteArray); 
      outStream.close(); 
     } else { 
      outStream = new FileOutputStream 
           (String.format(imageFilePath,System.currentTimeMillis())); 
      outStream.write(data); 
      outStream.close();   
     }  

     preview.camera.startPreview(); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } finally { 
    } 
    } 
}; 
+1

यह कोड छवि को घुमाने के लिए है, पूर्वावलोकन के रूप में नहीं। –

संबंधित मुद्दे