2013-03-22 6 views
8

हम एक कस्टम एंड्रॉइड कैमरा गतिविधि बना रहे हैं जहां एक आयत कैमरा पूर्वावलोकन के अंदर ओवरले किया गया है और जब फोटो कैप्चर किया जाता है ( बटन दबाकर), हम फसल करना चाहते हैं अंतिम छवि के संबंधित आयताकार क्षेत्र । समस्या यह है कि हमने अभी तक यह नहीं पता लगाया है कि कैसे एंड्रॉइड अंतिम छवि पर पूर्वावलोकन स्क्रीन को मानचित्र करता है।अंतिम तस्वीर के लिए एंड्रॉइड कैमरा पूर्वावलोकन मैपिंग

हम निम्नलिखित सूत्र की कोशिश की है, लेकिन केवल कुछ मामलों में काम करता है:

Let x और y कैमरा पूर्वावलोकन में दिखाया गया के रूप में आयत के ऊपरी बाएं कोने के निर्देशांक हो।

पूर्वावलोकन_विड्थ और preview_height कैमरे की चौड़ाई और ऊंचाई पूर्वावलोकन दें। ये getBestPreviewSize() फ़ंक्शन का उपयोग कर रहे हैं, जो समर्थित पूर्वावलोकन आकार के माध्यम से को लूप करता है और बड़ा चयन करता है। मान लीजिए कि वे 1280 और 720 हैं।

कैमरे द्वारा समर्थित अंतिम चित्र की चौड़ाई और ऊंचाई होने के लिए चित्र_विड्थ और तस्वीर_हेइट दें। हमारे उद्देश्य के लिए, मान लें कि यह 1632 * 1224 (सोनी एरिक्सन XPERIA पर यह 2 एमपी से मेल खाता है)।

हम x_map, y_map खोजना चाहते हैं जो अंतिम छवि के फसल आयत के x और y हैं।

तो सादृश्य के शासन के द्वारा

, सूत्र हम इस्तेमाल किया था:

x_map = picture_width * एक्स/preview_width; y_map = picture_height * y/preview_height;

हालांकि, यह सभी मामलों में काम नहीं कर रहा है। हमने पाया है कि जब फ़ोन के स्क्रीन आयाम पूर्वावलोकन आकार के समान होते हैं, तो यह सूत्र लगभग काम करता है (लगभग, एक छोटी त्रुटि के साथ)।

हालांकि सोनी एक्सपीरिया फोन जैसे अन्य मामलों के लिए, जहां स्क्रीन आयाम हैं: चौड़ाई: 480 और ऊंचाई: 854, सूत्र विफल रहता है।

उदाहरण के लिए, x = 50 है, तो के लिए x_map = 1632 * 50/1280 = 63,75 हालांकि इस संख्या, द्वारा आयत क्षेत्र अंतिम तस्वीर से काटी दिखाया गया है, वास्तव में आयत में अनुरूप नहीं है पूर्वावलोकन क्षेत्र यह रास्ता बंद है। हमारा सूत्र स्क्रीन आयामों को ध्यान में रखता है, हालांकि उनके लिए खाते में संशोधन के साथ प्रयोग, ने किसी भी वांछनीय परिणाम नहीं दिए हैं।

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

क्या आप उपरोक्त के लिए एक सही सूत्र जानते हैं?

उत्तर

1

सबसे पहले, सबसे बड़ा चित्र आकार Camera.getSupportedPictureSizes पर लौटाएं - यह आपके कैमरे का मूल संकल्प है जिससे आप मूल पहलू अनुपात निर्धारित कर सकते हैं। किसी भिन्न पहलू अनुपात के साथ कोई चित्र आकार या पूर्वावलोकन आकार 'Matrix.ScaleToFit.CENTER' के अनुसार फसल किया जाएगा।

यह भी देखें: https://stackoverflow.com/a/18159351/994834

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