2016-02-15 4 views
10

मैं एंड्रॉइड डेवलपमेंट में नौसिखिया हूं, इसलिए मेरा प्रश्न मामूली है तो अग्रिम में माफी माँगती है। मेरे ऐप के एक हिस्से में मुझे अपने पिछले कैमरे का लाइव पूर्वावलोकन चाहिए, इसलिए मैंने एक कस्टम क्लास बनाया जो SurfaceView को बढ़ाता है और SurfaceHolder को लागू करता है। कॉलबैक (मैंने मूल रूप से एंड्रॉइड दस्तावेज़ों में निर्देशों का पालन किया)।एंड्रॉइड 5x रिवर्स लैंडस्केप सेंसर एक एंड्रॉइड कैमरा पूर्वावलोकन ऐप में

दुर्भाग्यवश, मैं नेक्सस 5x में अपने ऐप का परीक्षण कर रहा हूं, जिसे मैंने अभी महसूस किया है कि उसने कैमरे सेंसर को विपरीत तरीके से स्थापित किया है। इसी कारण से, मेरे नेक्सस 5x पर चलते समय मेरे ऐप का कैमरा पूर्वावलोकन उल्टा दिखाई देता है, जो कुछ मैं नहीं चाहता हूं।

ऐसा लगता है कि नया android.hardware.camera2 API स्वचालित रूप से इस समस्या को संभालने में सक्षम है। आखिरकार मुझे इस नए एपीआई का उपयोग करके अपने सभी कोड को अपडेट करने की आवश्यकता होगी, लेकिन अब मुझे पुरानी कैमरा एपीआई का उपयोग करते समय एक त्वरित फिक्स चाहिए।

तो मैं वहां पढ़ रहा था और मुझे कोड का एक टुकड़ा मिला जो मुझे इस समस्या को हल करने के लिए SurfaceChanged विधि में पेश करने की आवश्यकता होगी। यहां यह है:

Display display = ((WindowManager)getContext().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); 

     if(display.getRotation() == Surface.ROTATION_0) 
     { 
      parameters.setPreviewSize(capHeight, capWidth);       
      camera.setDisplayOrientation(90); 
     } 

     if(display.getRotation() == Surface.ROTATION_90) 
     { 
      parameters.setPreviewSize(capWidth, capHeight);       
     } 

     if(display.getRotation() == Surface.ROTATION_180) 
     { 
      parameters.setPreviewSize(capHeight, capWidth);    
     } 

     if(display.getRotation() == Surface.ROTATION_270) 
     { 
      parameters.setPreviewSize(capWidth, capHeight); 
      camera.setDisplayOrientation(180); 
     } 

     camera.setParameters(parameters);*/ 

     camera.startPreview(); 

समस्या यह है कि मुझे नहीं लगता कि कुछ बदल गया है।

कोई विचार?

उत्तर

0

वही यहां। चूंकि कैमरा 2 डिवाइस < एपीआई 21 का समर्थन नहीं करता है, और दो एपीआई लागू नहीं करना चाहते हैं, तो यह ठीक होगा कि एक त्वरित फिक्स प्राप्त करें।

मैं तरह somthing कोशिश कर रहा हूँ:

if (Build.MODEL.equals("Nexus 5x")){ 
    // rotate camera 180° 
    mCamera.setDisplayOrientation(180); 
} 

लेकिन कैमरे के प्रदर्शन बारी बारी से नहीं कर सकते। यह जांचने के लिए कि क्या पूर्वावलोकनकॉलबैक

के साथ कुछ करने के लिए कुछ है क्या यह 2 एपिस का उपयोग करने में एक बुरी बात है? इस विषय के रूप में, यह अनुशंसित नहीं है: How to use Android's camera or camera2 API to support old and new API versions without deprecation notes?

+1

नेक्सस 6 पी के बारे में क्या? – innich

9

5 एक्स कैमरा "रिवर्स" नहीं है; यह अपने मानकों में सही कैमरा उन्मुखीकरण रिपोर्ट करता है, तो कोई विशेष समाधान, जरूरत है सिर्फ यकीन है कि आप प्रदर्शन उन्मुखीकरण सही ढंग से स्थापित कर रहे हैं बनाने:

public static void setCameraDisplayOrientation(Activity activity, 
    int cameraId, android.hardware.Camera camera) { 
android.hardware.Camera.CameraInfo info = 
     new android.hardware.Camera.CameraInfo(); 
android.hardware.Camera.getCameraInfo(cameraId, info); 
int rotation = activity.getWindowManager().getDefaultDisplay() 
     .getRotation(); 
int degrees = 0; 
switch (rotation) { 
    case Surface.ROTATION_0: degrees = 0; break; 
    case Surface.ROTATION_90: degrees = 90; break; 
    case Surface.ROTATION_180: degrees = 180; break; 
    case Surface.ROTATION_270: degrees = 270; break; 
} 

int result; 
if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) { 
    result = (info.orientation + degrees) % 360; 
    result = (360 - result) % 360; // compensate the mirror 
} else { // back-facing 
    result = (info.orientation - degrees + 360) % 360; 
} 
camera.setDisplayOrientation(result); 
} 

से http://developer.android.com/reference/android/hardware/Camera.html#setDisplayOrientation%28int%29 5X को

+4

पूर्वावलोकन के लिए यह सही है लेकिन जब आप छवि को संसाधित करना चाहते हैं तो आपको कैमरे के घूर्णन पर विचार करना होगा जो कि अधिकांश उपकरणों पर 90 की तुलना में 270 है (जिसका अर्थ है कि छवि उल्टा है)। –

+5

@EmanuelMoecklin हां उपर्युक्त कोड कैमरा डिस्प्ले को ठीक करता है लेकिन दिखाए गए चित्र अभी भी उल्टा हैं, मैं इस समस्या को कैसे ठीक कर सकता हूं? – user2056563

+0

मैंने ओपनसीवी 4 एंड्रॉइड – Heribert

3
if (Build.MODEL.equals("Nexus 5X")){ 
    // rotate camera 180° 
    mCamera.setDisplayOrientation(180); 
} 

5x बदलें ठीक हो जाएगा।

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