2015-11-20 7 views
14

मेरे पास पारदर्शी पृष्ठभूमि के साथ एक सापेक्ष लेआउट है जिसमें चित्र, टेक्स्ट इत्यादि शामिल हैं, जब मैं ड्रॉइंग कैश या कैनवास का उपयोग करके अपने बिटमैप को कैप्चर करता हूं तो पारदर्शी रंग मिलता है काला मैं साधन है, लेकिन कोई सफलता की बहुत सारी की कोशिश की है करने के लिए परिवर्तित ...पारदर्शी पृष्ठभूमि के साथ सापेक्ष लेआउट के स्नैपशॉट को कैप्चर करना काला पृष्ठभूमि के साथ बिटमैप को पारदर्शी नहीं देता

rl_mainCanvesLayout.setDrawingCacheBackgroundColor(Color.TRANSPARENT); 
Bitmap bitmap =Bitmap.createBitmap(rl_mainCanvesLayout.getDrawingCache()); 
rl_mainCanvesLayout.setDrawingCacheEnabled(false); 
Bitmap bitmap = Bitmap.createBitmap(rl_mainCanvesLayout.getDrawingCache()); 

private String savebitmap(Bitmap bitmap, String filename) { 
    String dir = Environment.getExternalStorageDirectory() + File.separator + "abc"; 
    File file_dir = new File(dir); 
    file_dir.mkdir(); 
    FileOutputStream outStream = null; 
    File file = new File(dir, filename + ".jpg"); 
    if (file.exists()) { 
     file.delete(); 
     file = new File(dir, filename + ".jpg"); 
     Log.e("file exist", "" + file + ",Bitmap= " + filename); 
    } 
    try { 
     outStream = new FileOutputStream(file); 
     bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outStream); 
     outStream.flush(); 
     outStream.close(); 

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

    } 
    Log.e("file", "" + file); 
    return file.toString(); 

} 
+2

इसे पीएनजी के रूप में सहेजें, जेपीईजी में पारदर्शिता समर्थन नहीं है। –

+0

thks यह काम किया। –

उत्तर

6

विधि getDrawingCache() के स्रोत के अनुसार, यह कुछ कॉल के बाद buildDrawingCache() में समाप्त होता है, यह वह जगह है जहाँ असली काम है किया हुआ। यहां, यह बिटमैप बनाता है फिर इसे कैनवास द्वारा खींचें। आपकी स्थिति में आप पारदर्शी रंग सेट करते हैं, जो कि 0 के बराबर है, इसके लिए, यह लौटा हुआ बिटमैप का रंग नक्शा सेट नहीं करता है (लाइन 14450 मिटाकर कॉलर नहीं कहा जाता है), यह इसे डिफ़ॉल्ट मान पर छोड़ देता है। बाद में जब यह आपके लेआउट को खींचता है, तो यह स्वयं और उसके बच्चों को छोड़कर कुछ भी नहीं लेता है। इसके परिणामस्वरूप, आपको काले रंग की पृष्ठभूमि मिलती है क्योंकि उन पिक्सेल को असाइन नहीं किया जाता है।

इसके लिए एक संभावित वर्कोरंड, विभिन्न ड्राइंग कैशबैकग्राउंड रंग सेट करना है, जो मान 0 नहीं है, या सापेक्ष लेआउट के लिए रंग विशेषता सेट करें। इनके द्वारा, आप वांछित पृष्ठभूमि रंग प्राप्त कर सकते हैं।

यदि आपका इरादा लेआउट का स्नैपशॉट प्राप्त करना था और यह वास्तविक पृष्ठभूमि (अन्य विचार, सक्रियता इत्यादि) प्राप्त करना था, तो आपको अपने माता-पिता से ड्राइंग कैश प्राप्त करना चाहिए और इसे छवि संपादन के साथ इस लेआउट के ड्राइंग कैश पर लागू करना चाहिए या बस बस एक स्क्रीनशॉट लें और लेआउट के क्षेत्र को फसल करें।

संबंधित मुद्दे