2012-08-11 15 views
6

मैं Bitmap ऑब्जेक्ट पर कुछ प्रसंस्करण (गुणवत्ता में सुधार और आकार बदलने का थोड़ा सा) करता हूं और फिर इसे फ़ाइल नाम "myfile.png" देकर bitmap.compress() फ़ंक्शन का उपयोग करके संग्रहीत करता हूं।"setImageBitmap()" के बिना एक पीएनजी फ़ाइल के साथ एक छवि दृश्य कैसे लोड करें?

newbitmap = processImage(bitmap); 
FileOutputStream fos = context.openFileOutput("myfile.png", Context.MODE_PRIVATE); 
newbitmap.compress(CompressFormat.PNG, 100, fos); 

अब मैं एक ImageView में इस छवि को लोड करना चाहते हैं, लेकिन मैं नहीं कर सकते setImageBitmap() का उपयोग करने के लिए। क्या कोई विकल्प है?

कारण मैं नहीं कर सकते setImageBitmap() का उपयोग है कि मैं एक विजेट के लिए RemoteViews उपयोग कर रहा हूँ, और बिटमैप पद्धति का उपयोग करके विफल बाइंडर लेन-देन त्रुटि की ओर जाता है जब छवि बड़ी है।

मैं नीचे दिए गए कोड का उपयोग कर छवि uri सेट करने के लिए कोशिश की, लेकिन छवि ImageView पर लोड नहीं करता है:

RemoteViews rv = new RemoteViews(context.getPackageName(), R.layout.widget_layout); 

File internalFile = context.getFileStreamPath("myfile.png"); 
Uri internal = Uri.fromFile(internalFile); 
rv.setImageViewUri(R.id.widgetImageView, internal); 
updateAppWidget(awID, rv); 

आपकी मदद के लिए धन्यवाद!

+2

क्या कोई तरीका है कि आप बाइट सरणी भेज सकते हैं? फिर दूसरी तरफ से बिटमैप डीकोड करें। मुझे यकीन नहीं है। – Shaiful

उत्तर

2

आंतरिक भंडारण में छवियों को संग्रहीत करने के दौरान, आप MODE_WORLD_READABLE बजाय MODE_PRIVATE के मोड सेट करने के लिए है। ऐसा इसलिए है क्योंकि एक विजेट को होम स्क्रीन प्रक्रिया द्वारा नियंत्रित किया जाता है और यदि आप मोड को सही नहीं सेट करते हैं तो यह आपकी फ़ाइलों तक नहीं पहुंच सकता है। ,

FileOutputStream fos = context.openFileOutput("myfile.png", Context.MODE_WORLD_READABLE); 

इसके अलावा Uri.parse() और getPath() बजाय fromFile() का उपयोग करें:

FileOutputStream fos = context.openFileOutput("myfile.png", Context.MODE_PRIVATE); 
साथ

:

तो इस लाइन की जगह। fromFile() केवल एंड्रॉइड 2.2 और उसके बाद के संस्करण पर काम करता है।

Uri internal = Uri.Parse(internalFile.getPath()); 

आशा है कि इससे मदद मिलती है!

1

का उपयोग rv.setImageViewUri(R.id.widgetImageView, internal); के बजाय छवि को सही ढंग से लोड करना प्रतीत होता है। आप इसे आज़मा सकते हैं।

यदि यह काम नहीं करता है तो छवि को स्केल करने का विकल्प अभी भी है ताकि आप setImageBitmap विधि का उपयोग कर सकें। उदाहरण:

public static Bitmap scaleDownBitmap(Bitmap photo, int newHeight, Context context) { 

final float densityMultiplier = context.getResources().getDisplayMetrics().density;   

int h= (int) (newHeight*densityMultiplier); 
int w= (int) (h * photo.getWidth()/((double) photo.getHeight())); 

photo=Bitmap.createScaledBitmap(photo, w, h, true); 

return photo; 
} 
संबंधित मुद्दे