इमेजमैप में बिटमैप संलग्न करें


314

दिया हुआ

ImageView image = R.findViewById(R.id.imageView);
image.setImageBitmap(someBitmap);

क्या बिटमैप को पुनः प्राप्त करना संभव है?


1
हां यह संभव है, जब आप छवि पर क्लिक करेंगे तो हमें यह मिलेगा कि यदि आप यह आवश्यकता चाहते हैं तो मुझे बताएं।
राजारेड्डी पोलामेड्डी

जवाबों:


809
Bitmap bitmap = ((BitmapDrawable)image.getDrawable()).getBitmap();

34
यह जांचने के लिए सावधान रहें कि image.getDrawable()क्या वास्तव में आपको BitmapDrawable(बचने के लिए IllegalCastExceptions) कास्ट किया जा सकता है । यदि, उदाहरण के लिए, आप अपनी छवि में परतों का उपयोग करते हैं तो यह स्निपेट थोड़ा अलग होगा:Bitmap bitmap = ((BitmapDrawable)((LayerDrawable)image.getDrawable()).getDrawable(0)).getBitmap();
एलेक्स सेमेनिउक

2
यह कभी-कभार, कुछ या सभी ब्लैक पिक्सल्स के साथ बिटमैप लौटाता है।

2
यदि आपने ड्रॉबल / इमेजव्यू पर आवेदन किया है तो यह मूल बिटमैप और न ही फ़िल्टर किए गए बिटमैप को वापस नहीं करेगा।
प्रियध्वज ५

4
क्या यह काम करता है अगर इसमें से छवि ImageViewसेट है URI? imageView.setImageUri()
हेंड्र एंग्रीयन

1
@praneethkumar यह मेरे परिदृश्य में काम करता है। इस भयानक जवाब के लिए अंगूठे!
हेंड्र एंगरियन

46

यह आपको एक Bitmapसे मिलेगा ImageView। हालाँकि, यह वही बिटमैप ऑब्जेक्ट नहीं है जिसे आपने सेट किया है। यह एक नया है।

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

=== EDIT ===

 imageView.setDrawingCacheEnabled(true);
 imageView.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), 
                   MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
 imageView.layout(0, 0, 
                  imageView.getMeasuredWidth(), imageView.getMeasuredHeight()); 
 imageView.buildDrawingCache(true);
 Bitmap bitmap = Bitmap.createBitmap(imageView.getDrawingCache());
 imageView.setDrawingCacheEnabled(false);

जब यह "काम नहीं करता है", तो क्या होता है? क्या यह अशक्त या अपवाद छोड़ देता है या क्या?
सरवर इरफान

2
यह अशक्त है। कभी-कभी मुझे पृष्ठ को वास्तव में प्रदर्शित करने के लिए पुनः लोड करना पड़ता है।
नींबू

3
मुझे एक अशक्त सूचक देता है। :( इस लाइन पर:Bitmap bmap = Bitmap.createBitmap(mImageView.getDrawingCache());
Azurespot

रेखाचित्र को कोटलिन में चित्रित किया गया है
राजू yourPepe



0

यह कोड बेहतर है।

public static  byte[] getByteArrayFromImageView(ImageView imageView)
    {
        BitmapDrawable bitmapDrawable = ((BitmapDrawable) imageView.getDrawable());
        Bitmap bitmap;
        if(bitmapDrawable==null){
            imageView.buildDrawingCache();
            bitmap = imageView.getDrawingCache();
            imageView.buildDrawingCache(false);
        }else
        {
            bitmap = bitmapDrawable .getBitmap();
        }
        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
        return stream.toByteArray();
    }

क्या यह imageView.getDrawable () है; -> का मतलब है कि ड्रा करने योग्य फोल्डर से इमेज प्राप्त करना? CMIIW .... @ अहम्
गमरू

नहीं। आप इस कोड का उपयोग कर सकते हैं। Bitmap imagenAndroid = BitmapFactory.decodeResource(getResources(),R.drawable.jellybean_statue);
अहमद आगज़ादेह


-10

इस कोड को आज़माएं:

Bitmap bitmap;
bitmap = ((BitmapDrawable)image.getDrawable()).getBitmap();

6
क्या आप @Arslan के स्वीकृत उत्तर पर वृद्धि का वर्णन कर सकते हैं?
बुम्मी

आप बेहतर तरीके से बताएंगे कि आपका उत्तर उसकी समस्या का हल क्यों करता है
मुहम्मद रिफैट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.