2011-01-17 19 views
36

मेरे पास मेरा एप्लिकेशन है जो विभिन्न अनुपात वाले छवियों को प्रदर्शित कर रहा है, अंदर (सेंटर इनसाइड) छवि दृश्य का आकार बदल गया है। मुझे पृष्ठभूमि दृश्य (इस मामले में काला) सहित ImageView से बिटमैप बनाने की आवश्यकता है।एंड्रॉइड: संपूर्ण छवि दृश्य को बिटमैप में कैसे परिवर्तित करें?

तो उदाहरण के लिए मेरे पास डिवाइस स्क्रीन 320x480 है, पूर्ण स्क्रीन छवि देखें छवि के साथ 280x480 का आकार बदलें। मैं इससे 320x480 बिटमैप कैसे प्राप्त कर सकता हूं?

इस छविदृश्य के शीर्ष पर मेरे पास कुछ लोगो या बटन हैं जिन्हें मैं बिटमैप में शामिल नहीं करना चाहता, वे शीर्ष परत पर हैं। मुझे बस कुछ पक्षों से छवि और काले सीमा के साथ बिटमैप चाहिए।

उत्तर

88

आप छवि दृश्य छवि कैश का उपयोग कर सकते हैं। यह पूरे दृश्य को प्रस्तुत करेगा क्योंकि इसे एक नए बिटमैप में रखा गया है (स्केल किया गया है, पृष्ठभूमि के साथ सीमाबद्ध है)।

बस यह सुनिश्चित करें कि यह बनाया गया है।

imageView.buildDrawingCache(); 
Bitmap bmap = imageView.getDrawingCache(); 

स्क्रीन के रूप में आपके बिटमैप के रूप में आपका बिटमैप है।

+2

अच्छा लगता है लेकिन यह सिर्फ NullPointerException के साथ आलोचकों को पॉप करता है। ऐसा इसलिए है क्योंकि छवि अभी तक नहीं बनाई गई है? – yosh

+5

ठीक है, http://stackoverflow.com/questions/2339429/android-view-getdrawingcache-returns-null-only-null के साथ यह मेरी समस्या हल हो गया :) धन्यवाद। – yosh

+4

प्रलेखन में कहा गया है कि 'buildDrawingCache()' को 'नष्ट करने' के लिए कॉल द्वारा फॉलो किया जाना चाहिए (यहां देखें: http://developer.android.com/reference/android/view/View.html#buildDrawingCache%28boolean%29) –

54

आप की कोशिश की है:

BitmapDrawable drawable = (BitmapDrawable) imageView.getDrawable(); 
Bitmap bitmap = drawable.getBitmap(); 
+0

यह छवि का आकार देता है, लेकिन है कि समस्या नहीं है। मुझे काला सीमा के साथ बिटमैप बनाने के लिए कुछ तेज़ तरीका चाहिए। यहां मुझे लगता है कि मुझे छवि से बनाए गए बिटमैप में मैन्युअल रूप से जोड़ने के लिए छवि के अभिविन्यास और मध्य और दोनों काले सीमाओं की गणना करना है। – yosh

+0

निश्चित रूप से सबसे अच्छा समाधान, यदि आप किसी छवि दृश्य की वास्तविक सामग्री प्राप्त करना चाहते हैं और न केवल दृश्यमान हिस्सों को प्राप्त करना चाहते हैं। –

+0

ध्यान दें कि imageView.getDrawingCache() को वास्तविक बिटमैप प्रस्तुति मिलेगी, कैश साफ़ होने पर बिटमैप खो जाएगा। – secretlm

4

बस ज़ोर से यहां शायद कुछ इस तरह काम करेगा बाहर सोच (वैसे थोड़ा जावा में ग्राफिक्स के साथ काम विशेषज्ञता के साथ) ?:

ImageView iv = (ImageView)findViewById(R.id.imageview); 
Bitmap bitmap = Bitmap.createBitmap(iv.getWidth(), iv.getHeight(), Bitmap.Config.RGB_565); 
Canvas canvas = new Canvas(bitmap); 
iv.draw(canvas); 
जिज्ञासा से बाहर

, आप क्या खत्म करने की कोशिश कर रहे हैं? आपके दिमाग में आपके लक्ष्य को प्राप्त करने का एक बेहतर तरीका हो सकता है।

+1

को कैसे संभालें मुझे पूरी स्क्रीन को टुकड़ा करने की आवश्यकता है और काले रंग के किनारे रखना चाहते हैं, उदाहरण के लिए टाइल पर केवल आधा छवि + मैं स्क्रीन पर केंद्रित छवि चाहता हूं। कैनवास कुछ बुरी जे 2 एमई यादें वापस लाता है: डी – yosh

+0

शायद मैं गलतफहमी कर रहा हूं ... क्या आप बस छवि को टाइल करना चाहते हैं? आप एक्सएमएल में एक बिटमैप को खींचने योग्य परिभाषित कर सकते हैं जो स्वचालित रूप से टाइल करेगा। मैं बिल्कुल समझ नहीं पा रहा हूं कि आप क्या पूछ रहे हैं। – kcoppock

+0

मैं काले रंग की पृष्ठभूमि सहित छवियों को टुकड़ा करना चाहता हूं (यानी 50x50)। छवियों में अलग-अलग रंग/अनुपात होते हैं। मैंने सोचा कि तेजी से छवि छवि सामग्री से पूरी छवि दृश्य से बिटमैप बनाएगा। – yosh

1
try { 
     photo.setImageURI(Uri.parse("Location"); 
     BitmapDrawable drawable = (BitmapDrawable) photo.getDrawable(); 
     Bitmap bitmap = drawable.getBitmap(); 
     bitmap = Bitmap.createScaledBitmap(bitmap, 70, 70, true); 
     photo.setImageBitmap(bitmap); 

    } catch (Exception e) { 

    } 
0

यह एक काम कोड

imageView.setDrawingCacheEnabled(true); 
imageView.buildDrawingCache(); 
Bitmap bitmap = Bitmap.createBitmap(imageView.getDrawingCache()); 
संबंधित मुद्दे