android - स्थान पर बिटमैप सहेजें




bitmap save (10)

मैं एक वेब सर्वर से एक छवि डाउनलोड करने के लिए एक फ़ंक्शन पर काम कर रहा हूं, इसे स्क्रीन पर प्रदर्शित करता हूं, और यदि उपयोगकर्ता छवि को रखना चाहता है, तो इसे किसी निश्चित फ़ोल्डर में एसडी कार्ड पर सहेजें। क्या बिटमैप लेने और इसे मेरी पसंद के फ़ोल्डर में एसडी कार्ड में सहेजने का कोई आसान तरीका है?

मेरी समस्या यह है कि मैं छवि डाउनलोड कर सकता हूं, इसे बिटमैप के रूप में स्क्रीन पर प्रदर्शित कर सकता हूं। किसी विशेष फ़ोल्डर में किसी छवि को सहेजने के लिए मैं एकमात्र तरीका ढूंढने में सक्षम हूं, FileOutputStream का उपयोग करना है, लेकिन इसके लिए बाइट सरणी की आवश्यकता है। मुझे यकीन नहीं है कि बिटमैप से बाइट सरणी में कैसे परिवर्तित करें (यदि यह सही तरीका भी है), तो मैं डेटा लिखने के लिए फ़ाइलऑटपुटस्ट्रीम का उपयोग कर सकता हूं।

मीडियास्टोर का उपयोग करने के लिए मेरे पास दूसरा विकल्प है:

MediaStore.Images.Media.insertImage(getContentResolver(), bm,
    barcodeNumber + ".jpg Card Image", barcodeNumber + ".jpg Card Image");

जो एसडी कार्ड में सहेजने के लिए ठीक काम करता है, लेकिन आपको फ़ोल्डर को कस्टमाइज़ करने की अनुमति नहीं देता है।


// | == | बिटमैप से पीएनजी फ़ाइल बनाएं:

void devImjFylFnc(String pthAndFylTtlVar, Bitmap iptBmjVar)
{
    try
    {
        FileOutputStream fylBytWrtrVar = new FileOutputStream(pthAndFylTtlVar);
        iptBmjVar.compress(Bitmap.CompressFormat.PNG, 100, fylBytWrtrVar);
        fylBytWrtrVar.close();
    }
    catch (Exception errVar) { errVar.printStackTrace(); }
}

// | == | फ़ाइल से बिमाप प्राप्त करें:

Bitmap getBmjFrmFylFnc(String pthAndFylTtlVar)
{
    return BitmapFactory.decodeFile(pthAndFylTtlVar);
}

100 के साथ Bitmap.compress विधि को क्यों कॉल न करें (जो लगता है जैसे यह Bitmap.compress है)?


कुछ प्रारूप, जैसे पीएनजी जो लापरवाह है, गुणवत्ता सेटिंग को अनदेखा कर देगा।


जिस तरह से मैंने पीएनजी और पारदर्शिता भेजने के लिए पाया।

String file_path = Environment.getExternalStorageDirectory().getAbsolutePath() +
                    "/CustomDir";
File dir = new File(file_path);
if(!dir.exists())
  dir.mkdirs();

String format = new SimpleDateFormat("yyyyMMddHHmmss",
       java.util.Locale.getDefault()).format(new Date());

File file = new File(dir, format + ".png");
FileOutputStream fOut;
try {
        fOut = new FileOutputStream(file);
        yourbitmap.compress(Bitmap.CompressFormat.PNG, 85, fOut);
        fOut.flush();
        fOut.close();
     } catch (Exception e) {
        e.printStackTrace();
 }

Uri uri = Uri.fromFile(file);     
Intent intent = new Intent(android.content.Intent.ACTION_SEND);
intent.setType("image/*");
intent.putExtra(android.content.Intent.EXTRA_SUBJECT, "");
intent.putExtra(android.content.Intent.EXTRA_TEXT, "");
intent.putExtra(Intent.EXTRA_STREAM, uri);

startActivity(Intent.createChooser(intent,"Sharing something")));

बिटमैप को फ़ाइल के रूप में सहेजने के लिए आपको Bitmap.compress() विधि का उपयोग करना चाहिए। यह आपकी तस्वीर को संकुचित करेगा (अगर प्रारूप का उपयोग किया जाता है) आपकी तस्वीर और इसे आउटपुटस्ट्रीम में दबाएं।

यहां getImageBitmap(myurl) माध्यम से प्राप्त बिटमैप इंस्टेंस का एक उदाहरण दिया गया है getImageBitmap(myurl) 85% की संपीड़न दर के साथ जेपीईजी के रूप में संपीड़ित किया जा सकता है:

// Assume block needs to be inside a Try/Catch block.
String path = Environment.getExternalStorageDirectory().toString();
OutputStream fOut = null;
Integer counter = 0;
File file = new File(path, "FitnessGirl"+counter+".jpg"); // the File to save , append increasing numeric counter to prevent files from getting overwritten.
fOut = new FileOutputStream(file);

Bitmap pictureBitmap = getImageBitmap(myurl); // obtaining the Bitmap
pictureBitmap.compress(Bitmap.CompressFormat.JPEG, 85, fOut); // saving the Bitmap to a file compressed as a JPEG with 85% compression rate
fOut.flush(); // Not really required
fOut.close(); // do not forget to close the stream

MediaStore.Images.Media.insertImage(getContentResolver(),file.getAbsolutePath(),file.getName(),file.getName());

मैं एक तस्वीर भी सहेजना चाहूंगा। लेकिन मेरी समस्या (?) यह है कि मैं इसे एक बिटमैप से सहेजना चाहता हूं जिसे खींचा गया है।

मैंने इसे इस तरह बनाया:

 @Override
 public boolean onOptionsItemSelected(MenuItem item) {
            switch (item.getItemId()) {
            case R.id.save_sign:      

                myView.save();
                break;

            }
            return false;    

    }

public void save() {
            String filename;
            Date date = new Date(0);
            SimpleDateFormat sdf = new SimpleDateFormat ("yyyyMMddHHmmss");
            filename =  sdf.format(date);

            try{
                 String path = Environment.getExternalStorageDirectory().toString();
                 OutputStream fOut = null;
                 File file = new File(path, "/DCIM/Signatures/"+filename+".jpg");
                 fOut = new FileOutputStream(file);

                 mBitmap.compress(Bitmap.CompressFormat.JPEG, 85, fOut);
                 fOut.flush();
                 fOut.close();

                 MediaStore.Images.Media.insertImage(getContentResolver()
                 ,file.getAbsolutePath(),file.getName(),file.getName());

            }catch (Exception e) {
                e.printStackTrace();
            }

 }

सुनिश्चित करें कि आप bitmap.compress कॉल करने से पहले निर्देशिका बनाई गई है:

new File(FileName.substring(0,FileName.lastIndexOf("/"))).mkdirs();

हे बस नाम .bmp को दें

यह करो:

ByteArrayOutputStream bytes = new ByteArrayOutputStream();
_bitmapScaled.compress(Bitmap.CompressFormat.PNG, 40, bytes);

//you can create a new file name "test.BMP" in sdcard folder.
File f = new File(Environment.getExternalStorageDirectory()
                        + File.separator + "**test.bmp**")

यह लगता है कि आईएम बस फूडिंग के आसपास है लेकिन बीएमपी फोराम में सहेजे जाने के बाद इसे आजमाएं .. चेयर


Bitmap bbicon;

bbicon=BitmapFactory.decodeResource(getResources(),R.drawable.bannerd10);
//ByteArrayOutputStream baosicon = new ByteArrayOutputStream();
//bbicon.compress(Bitmap.CompressFormat.PNG,0, baosicon);
//bicon=baosicon.toByteArray();

String extStorageDirectory = Environment.getExternalStorageDirectory().toString();
OutputStream outStream = null;
File file = new File(extStorageDirectory, "er.PNG");
try {
    outStream = new FileOutputStream(file);
    bbicon.compress(Bitmap.CompressFormat.PNG, 100, outStream);
    outStream.flush();
    outStream.close();
} catch(Exception e) {

}

FileOutputStream out = null;
try {
    out = new FileOutputStream(filename);
    bmp.compress(Bitmap.CompressFormat.PNG, 100, out); // bmp is your Bitmap instance
    // PNG is a lossless format, the compression factor (100) is ignored
} catch (Exception e) {
    e.printStackTrace();
} finally {
    try {
        if (out != null) {
            out.close();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}




save