java - वेबव्यू से छवि सहेजें




android canvas (2)

आप बिटमैप BitmapFactory का उपयोग करके वेब से प्राप्त फ़ाइल से बस बिटमैप क्यों नहीं बनाते हैं और फिर WebView को स्नैपशॉट करने के बजाय इसे लिखते हैं?

मैं छोटा होने की कोशिश करूंगा - इसलिए मैं यह ऐप बना रहा हूं, जहां कस्टम Webview छवि अपलोड की गई है, कैनवास खींचें और इसे सेव करें। अब मैं इसे सहेजने के बिंदु तक सबकुछ सफलतापूर्वक निष्पादित करता हूं। मैंने कई अलग-अलग तरीकों की कोशिश की है, लेकिन कोई भी काम नहीं किया है।

मैं Url से unedited छवि को बचाने के साथ:

public void DownloadFromUrl(String fileName) {  //this is the downloader method
    try {
        URL url = new URL(wv2.getUrl()); //you can write here any link
        File file = new File(fileName);
        Canvas canvas = new Canvas();
        wv2.draw(canvas );

        long startTime = System.currentTimeMillis();                   
        Log.d("ImageManager", "download begining");
        Log.d("ImageManager", "download url:" + url);
        Log.d("ImageManager", "downloaded file name:" + fileName);
        URLConnection ucon = url.openConnection();

        InputStream is = ucon.getInputStream();
        BufferedInputStream bis = new BufferedInputStream(is);

        ByteArrayBuffer baf = new ByteArrayBuffer(50);
        int current = 0;
        while ((current = bis.read()) != -1) {
            baf.append((byte) current);
        }

        FileOutputStream fos = new FileOutputStream(file);
        fos.write(baf.toByteArray());
        fos.close();
        Log.d("ImageManager", "download ready in"
                        + ((System.currentTimeMillis() - startTime) / 1000)
                        + " sec");
    } catch (IOException e) {
        Log.d("ImageManager", "Error: " + e);
    }
}

कस्टम webview में मेरा ड्रॉ फ़ंक्शन इस तरह दिखता है:

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw (canvas);
    /*code that draws different stuff*/
}

संपादित छवि को प्रदर्शित करने के लिए मुझे लगता है कि मुझे इसका उपयोग करने की आवश्यकता है:

canvas = new Canvas(mutableBitmap);                 
wv2.draw(canvas);
tstImage.setImageBitmap(mutableBitmap);

लेकिन फिर, मुझे नहीं पता कि छवि में कैनवास कैसे मर्ज करें। क्या मुझे ड्राइंग कैश का उपयोग करना चाहिए? यदि हां, तो कैसे?

[अद्यतन करें]

ठीक है, इसलिए मैंने इस कोड का उपयोग कर संपादित छवि को सहेजने में कामयाब रहा है

wv2.setDrawingCacheEnabled(true);
Bitmap bitmap = Bitmap.createBitmap(wv2.getDrawingCache());
wv2.setDrawingCacheEnabled(false);
tstImage.setImageBitmap(bitmap);
SaveImage(bitmap);

जहां SaveImage:

private void SaveImage(Bitmap finalBitmap) {
    String root = Environment.getExternalStorageDirectory().toString();
    File myDir = new File(root + "/Pictures/");    
    myDir.mkdirs();

    String fname = "Image-"+ count +".jpg";
    File file = new File (myDir, fname);
    if (file.exists ()) file.delete (); 
    try {
        FileOutputStream out = new FileOutputStream(file);
        finalBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
        out.flush();
        out.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

मेरी एकमात्र समस्या यह है कि मुझे जो छवि मिलती है वह उस समय वेबव्यू में दिखाया गया था। तो अगर मैं छवि को ज़ूम करता हूं, तो यह केवल इसका एक टुकड़ा बचाता है।

[अद्यतन 2]

मैंने समाधान के लिए खोज में से एक जवाब संशोधित किया है, यही वह है जो मैंने लिखा है। कोई छवि प्रदर्शित नहीं हो रही है।

   File imageFile = new File("file://" +    
    Environment.getExternalStorageDirectory() + "/Pictures/" + count + ".jpg");
                        String location = new String("file://" + Environment.getExternalStorageDirectory() + "/Pictures/" + count + ".jpg");
                        if(imageFile.exists()){
                            Bitmap myBitmap = BitmapFactory.decodeFile(location);
                            Bitmap mutableBitmap = myBitmap.copy(Bitmap.Config.ARGB_8888, true);
                            Canvas canvas = new Canvas(mutableBitmap);
                            wv2.draw(canvas);
                            tstImage.setImageBitmap(mutableBitmap);
                        }

इसे इस्तेमाल करे

Bitmap workingBitmap = Bitmap.createBitmap(chosenFrame);
Bitmap mutableBitmap = workingBitmap.copy(Bitmap.Config.ARGB_8888, true);
Canvas canvas = new Canvas(mutableBitmap);






android-bitmap