2012-07-23 21 views
8

मैं एंड्रॉइड एप्लिकेशन में छवि दिखाने के लिए बाइटमैप से एक छवि को बाइटमैप में बदलने की कोशिश कर रहा हूं।एंड्रॉइड: बाइट सरणी को बिटमैप में कैसे परिवर्तित करें?

बाइट [] का मान डेटाबेस द्वारा प्राप्त किया गया है और मैंने जांच की है कि यह शून्य नहीं था। उसके बाद, मैं छवि को कन्वर्ट करना चाहता हूं लेकिन सफलता नहीं कर सका। कार्यक्रम से पता चलता है कि बिटमैप का मूल्य शून्य है।

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

यदि आपको कोई सुझाव पता है, तो कृपया मुझे दिखाएं।

byte[] image = null; 
Bitmap bitmap = null; 
     try { 
      if (rset4 != null) { 
       while (rset4.next()) { 
        image = rset4.getBytes("img"); 
        BitmapFactory.Options options = new BitmapFactory.Options(); 
        bitmap = BitmapFactory.decodeByteArray(image, 0, image.length, options); 
       } 
      } 
      if (bitmap != null) { 
       ImageView researcher_img = (ImageView) findViewById(R.id.researcher_img); 
       researcher_img.setImageBitmap(bitmap); 
       System.out.println("bitmap is not null"); 
      } else { 
       System.out.println("bitmap is null"); 
      } 

     } catch (SQLException e) { 

     } 

उत्तर

6

अपने कोड से ऐसा प्रतीत होता है कि आप बाइट सरणी के एक हिस्से को लेने के लिए और उस हिस्से में BitmapFactory.decodeByteArray विधि का उपयोग करें। आपको BitmapFactory.decodeByteArray विधि में संपूर्ण बाइट सरणी की आपूर्ति करने की आवश्यकता है।

टिप्पणी

आप अपने चयन क्वेरी को बदलने के लिए (या कम से कम स्तंभ छवि अपने डाटाबेस में संग्रहित की ब्लॉब डेटा है कि के नाम (या इंडेक्स) जानते हैं) की जरूरत से संपादित करें। getByte के इंटीड ResultSet वर्ग की getBlob विधि का उपयोग करें। मान लें कि कॉलम का नाम image_data है। बीत रहा है यह जानकारी, कुछ इस तरह करने के लिए अपने कोड बदलने के लिए:

रेखा से नीचे
byte[] image = null; 
Bitmap bitmap = null; 
    try { 
     if (rset4 != null) { 
       Blob blob = rset4.getBlob("image_data"); //This line gets the image's blob data 
       image = blob.getBytes(0, blob.length); //Convert blob to bytearray 
       BitmapFactory.Options options = new BitmapFactory.Options(); 
       bitmap = BitmapFactory.decodeByteArray(image, 0, image.length, options); //Convert bytearray to bitmap 
     //for performance free the memmory allocated by the bytearray and the blob variable 
     blob.free(); 
     image = null; 
     } 
     if (bitmap != null) { 
      ImageView researcher_img = (ImageView) findViewById(R.id.researcher_img); 
      researcher_img.setImageBitmap(bitmap); 
      System.out.println("bitmap is not null"); 
     } else { 
      System.out.println("bitmap is null"); 
     } 

    } catch (SQLException e) { 

    } 
+0

आपके उत्तर के लिए धन्यवाद! कृपया मुझे बताएं कि उस विधि में पूरे बाइट सरणी को कैसे आपूर्ति करें। – Benben

+0

क्या आप कृपया निर्दिष्ट कर सकते हैं कि 'rset4' चर क्या है? आपके पोस्ट कोड को देखते हुए, ऐसा लगता है कि आपकी छवि की बाइट सरणी है। – Angelo

+1

ठीक है, rset4 SQL को निष्पादित करने के परिणाम को संग्रहीत करने के लिए परिणामसेट का एक मान है। 'परिणामसेट rset4 = शून्य; rset4 = stmt4.executeQuery ("छवियों से चुनें * जहां id =" + id); ' – Benben

12

उपयोग बिटमैप में बाइट्स कन्वर्ट करने के लिए, यह मेरे लिए काम कर रहा है।

Bitmap bmp = BitmapFactory.decodeByteArray(imageData, 0, imageData.length); 

आप, रेखा से ऊपर पाश की बाहर लगाने की जरूरत के रूप में यह बाइट्स सरणी लेता है और बिटमैप में परिवर्तित।

पीएस : - यहां imageData बाइट्स सरणी छवि

+0

बहुत बहुत धन्यवाद। लेकिन यह अभी भी काम नहीं करता है। मैं छवि के बाइट्स सरणी का भी उपयोग करता हूं। क्या मेरे बाइट्स सरणी में कुछ समस्याएं हैं ...? – Benben

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

  • कोई संबंधित समस्या नहीं^_^