Android में Bitmap ↔ Byte Array कन्वर्जन
यह उदाहरण दर्शाता है कि Bitmap को ByteArrayOutputStream के माध्यम से बाइट ऐरे में कैसे कन्वर्ट करें, और वापस बाइट ऐरे से Bitmap कैसे बनाएं। यह इमेज स्टोरेज, नेटवर्क ट्रांसमिशन, या डेटाबेस सेविंग के लिए उपयोगी है।
चरण 1: नया प्रोजेक्ट बनाएं
Android Studio में File → New Project चुनें।
चरण 2: एसेट्स में इमेज जोड़ें
src/main/assets/ फोल्डर बनाएं और image.png फ़ाइल रखें।
चरण 3: लेआउट फ़ाइल (res/layout/activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:id="@+id/rl"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp"
tools:context=".MainActivity">
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="24dp"
android:text="Bitmap → Byte Array → Bitmap"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/button"
android:layout_marginTop="24dp"
android:orientation="horizontal"
android:gravity="center"
android:weightSum="2">
<ImageView
android:id="@+id/ivSource"
android:layout_width="0dp"
android:layout_height="200dp"
android:layout_weight="1"
android:layout_marginEnd="8dp"
android:scaleType="centerCrop"
android:contentDescription="मूल इमेज"/>
<ImageView
android:id="@+id/ivCompressed"
android:layout_width="0dp"
android:layout_height="200dp"
android:layout_weight="1"
android:layout_marginStart="8dp"
android:scaleType="centerCrop"
android:contentDescription="कंप्रेस्ड इमेज"/>
</LinearLayout>
</RelativeLayout>
चरण 4: MainActivity (src/MainActivity.java)
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
public class MainActivity extends AppCompatActivity {
private Button convertButton;
private ImageView ivSource, ivCompressed;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
convertButton = findViewById(R.id.button);
ivSource = findViewById(R.id.ivSource);
ivCompressed = findViewById(R.id.ivCompressed);
convertButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
convertBitmapToByteArray();
}
});
}
private void convertBitmapToByteArray() {
try {
// 1. एसेट्स से इमेज लोड करें
InputStream inputStream = getAssets().open("image.png");
Bitmap originalBitmap = BitmapFactory.decodeStream(inputStream);
inputStream.close();
// मूल इमेज दिखाएं
ivSource.setImageBitmap(originalBitmap);
// 2. Bitmap → Byte Array (JPEG कंप्रेशन के साथ)
ByteArrayOutputStream stream = new ByteArrayOutputStream();
// क्वालिटी 0-100: 80 अच्छा बैलेंस है
originalBitmap.compress(Bitmap.CompressFormat.JPEG, 80, stream);
byte[] byteArray = stream.toByteArray();
// बाइट ऐरे साइज लॉग करें
int sizeKB = byteArray.length / 1024;
Toast.makeText(this, "बाइट ऐरे बनाया: " + sizeKB + " KB", Toast.LENGTH_SHORT).show();
// 3. Byte Array → Bitmap (डीकंप्रेस)
Bitmap compressedBitmap = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);
// कंप्रेस्ड इमेज दिखाएं
ivCompressed.setImageBitmap(compressedBitmap);
} catch (IOException e) {
e.printStackTrace();
Toast.makeText(this, "त्रुटि: " + e.getMessage(), Toast.LENGTH_SHORT).show();
}
}
}
कंप्रेशन फॉर्मेट विकल्प
| फॉर्मेट | गुण | उपयोग |
|---|---|---|
JPEG |
लॉसी, छोटा साइज, फोटो के लिए अच्छा | फोटो, नेटवर्क ट्रांसफर |
PNG |
लॉसलेस, पारदर्शिता सपोर्ट, बड़ा साइज | ग्राफिक्स, लोगो, पारदर्शी इमेज |
WEBP |
लॉसी/लॉसलेस दोनों, बेहतर कंप्रेशन | आधुनिक ऐप्स (API 14+) |
बड़े बिटमैप्स के लिए इनसैंपल साइज (मेमोरी बचाने के लिए)
public Bitmap decodeSampledBitmapFromStream(InputStream is, int reqWidth, int reqHeight) {
// पहले सिर्फ बाउंड्स डिकोड करें
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeStream(is, null, options);
// इनसैंपल साइज कैलकुलेट करें
options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);
// वास्तविक बिटमैप डिकोड करें
options.inJustDecodeBounds = false;
// स्ट्रीम रीसेट करें या दोबारा खोलें
return BitmapFactory.decodeStream(is, null, options);
}
private int calculateInSampleSize(BitmapFactory.Options options, int reqWidth, int reqHeight) {
int inSampleSize = 1;
if (options.outHeight > reqHeight || options.outWidth > reqWidth) {
int halfH = options.outHeight / 2;
int halfW = options.outWidth / 2;
while ((halfH / inSampleSize) >= reqHeight && (halfW / inSampleSize) >= reqWidth) {
inSampleSize *= 2;
}
}
return inSampleSize;
}
चरण 5: AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="app.com.sample">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
</intent-filter>
</activity>
</application>
</manifest>
ऐप चलाएं
ऐप लॉन्च करें, बटन दबाएं, और बाईं ओर मूल इमेज व दाईं ओर JPEG कंप्रेस्ड इमेज देखें। टोस्ट में बाइट ऐरे साइज दिखेगा।

