কীভাবে বাইট অ্যারে বিটম্যাপে রূপান্তর করবেন


123

আমি ছবিটি সঞ্চয় করতে চাই SQLite DataBase। আমি ব্যবহার করে এটি সঞ্চয় করতে চেষ্টা BLOBএবং String, উভয় ক্ষেত্রেই এটি ইমেজ সংরক্ষণ এবং এটি পুনরুদ্ধার করতে পারেন কিন্তু যখন আমি এটি রূপান্তর Bitmapব্যবহার BitmapFactory.decodeByteArray(...)ফেরত নাল।

আমি এই কোডটি ব্যবহার করেছি তবে এটি শূন্য হয়

Bitmap  bitmap = BitmapFactory.decodeByteArray(blob, 0, blob.length);

4
এই পৃষ্ঠায় "সম্পর্কিত" বিভাগে প্রথম 5-10 লিঙ্কগুলি পড়ুন।
মাদুর

2
আপনি কি ডাটাবেসে লেখার আগে বিটম্যাপটি এনকোড করেছেন?
রনি 14

উত্তর:


284

শুধু এটি চেষ্টা করুন:

Bitmap bitmap = BitmapFactory.decodeFile("/path/images/image.jpg");
ByteArrayOutputStream blob = new ByteArrayOutputStream();
bitmap.compress(CompressFormat.PNG, 0 /* Ignored for PNGs */, blob);
byte[] bitmapdata = blob.toByteArray();

যদি bitmapdataবাইট অ্যারে হয় তবে প্রাপ্তি Bitmapএভাবে করা হয়:

Bitmap bitmap = BitmapFactory.decodeByteArray(bitmapdata, 0, bitmapdata.length);

ডিকোড করা Bitmap, অথবা nullযদি চিত্রটি ডিকোড করা যায় না তবে প্রদান করে।


2
আপনি যদি অন্য ফর্ম্যাটে যেটি থেকে ডিকোড করার চেষ্টা করছেন তা
চিত্রটি

2
আমার যদি ক্রমানুসারে বহুবার এমন ক্রিয়াকলাপ করা দরকার হয় তবে কী হবে? প্রতিবার নতুন বিটম্যাপ অবজেক্ট তৈরি করা কি সম্পদ গ্রহণকারী নয়? আমি কীভাবে বিদ্যমান বিটম্যাপে আমার অ্যারেটি ডিকোড করতে পারি?
অ্যালেক্স সেমেনিয়ুক

যখন আপনার কাছে ইমেজ পিক্সেলের একটি বাফার থাকবে তখন আমি একটি আলাদা উত্তর পোস্ট করি। আমার বাফারে উচ্চতা এবং রঙের অভাবের কারণে আমি সর্বদা শূন্য হয়ে যাচ্ছিলাম। আশা করি এটা সাহায্য করবে!
জুলিয়ান

31

উত্তমের উত্তর আমার পক্ষে কার্যকর হয়নি। আমি যখন করলাম তখন আমি কেবল শূন্য হয়ে গেলাম:

Bitmap bitmap = BitmapFactory.decodeByteArray(bitmapdata, 0, bitmapdata.length);

আমার ক্ষেত্রে, বিটম্যাপটাটাতে কেবল পিক্সেলগুলির বাফার রয়েছে, সুতরাং প্রস্থ, উচ্চতা এবং রঙ বিটগুলি কোনটি ব্যবহার করে তা অনুমান করা ডিকোডবাইটআরে ফাংশনটির পক্ষে অসম্পূর্ণ। সুতরাং আমি এটি চেষ্টা করেছি এবং এটি কাজ করেছে:

//Create bitmap with width, height, and 4 bytes color (RGBA)    
Bitmap bmp = Bitmap.createBitmap(imageWidth, imageHeight, Bitmap.Config.ARGB_8888);
ByteBuffer buffer = ByteBuffer.wrap(bitmapdata);
bmp.copyPixelsFromBuffer(buffer);

বিভিন্ন রঙের বিকল্পের জন্য https://developer.android.com/references/android/ographicics/Bitmap.Config.html দেখুন


2
এমবিটম্যাপস কী?
ব্যবহারকারী 924
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.