Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Android

Android में Bitmap को बाइट ऐरे में कैसे कन्वर्ट करें?

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 कंप्रेस्ड इमेज देखें। टोस्ट में बाइट ऐरे साइज दिखेगा।

Android में Bitmap को बाइट ऐरे में कैसे कन्वर्ट करें?

Android में Bitmap को बाइट ऐरे में कैसे कन्वर्ट करें?

  1. एंड्रॉइड में इमेज को Base64 स्ट्रिंग में कैसे बदलें? एंड्रॉइड में इमेज को Base64 स्ट्रिंग में कैसे बदलें?

    Bitmap को Base64 एन्कोडेड स्ट्रिंग में कनवर्ट करें यह उदाहरण दर्शाता है कि ड्रॉएबल रिसोर्स से Bitmap लोड करके Base64 स्ट्रिंग में कैसे बदलें। चरण 1: नया प्रोजेक्ट बनाएं Android Studio में File → New Project चुनें। चरण 2: साधारण लेआउट res/layout/activity_main.xml: <?xml version=1.0 encoding=utf-

  1. एंड्रॉइड में Bitmap को Drawable में कैसे कन्वर्ट करें? एंड्रॉइड में Bitmap को Drawable में कैसे कन्वर्ट करें?

    एंड्रॉइड में Bitmap और Drawable के बीच कन्वर्जन यह उदाहरण दिखाता है कि `BitmapDrawable` क्लास का उपयोग करके Bitmap को Drawable में और Drawable को Bitmap में कैसे बदला जाता है। चरण 1: नया प्रोजेक्ट बनाएं Android Studio में File → New Project चुनकर नया प्रोजेक्ट बनाएं। चरण 2: लेआउट XML res/layout/ac

  1. Android में Drawable को Bitmap में कैसे बदलें? Android में Drawable को Bitmap में कैसे बदलें?

    Android में Drawable से Bitmap कन्वर्जन का तरीका यह उदाहरण दिखाता है कि ड्रॉएबल रिसोर्स (जैसे @drawable/image) को Bitmap ऑब्जेक्ट में कैसे बदला जाता है ताकि इमेज प्रोसेसिंग या मैनिपुलेशन की जा सके। चरण 1: नया प्रोजेक्ट बनाएं Android Studio में File → New Project चुनें। चरण 2: लेआउट फ़ाइल (res/layo