2013-09-07 7 views
5

मैं एंड्रॉइड पर काम कर रहा हूं और एक छविव्यू पर एक वेबसाइट से एक फेविकॉन (.ICO) डाउनलोड और प्रदर्शित करने की कोशिश कर रहा हूं।क्या 16x16 से बड़े रिज़ॉल्यूशन में एक .ICO फ़ाइल को डीकोड करने का कोई तरीका है?

अब तक मैंने HTTP कनेक्शन का उपयोग कर वेबसाइट से .ico को पढ़ने का प्रबंधन किया है, इसे इनपुट इनपुट के रूप में पुनर्प्राप्त करें। फिर मैं बिटमैप में स्ट्रीम को डीकोड करने के लिए बिटमैप फैक्ट्री का उपयोग करता हूं और इसे ImageView पर प्रदर्शित करता हूं। यहां कोड है:

public Bitmap getBitmapFromURL(URL src) {   
     try { 

      URL url = new URL("http", "www.google.com", "/favicon.ico"); 

      HttpURLConnection connection = (HttpURLConnection) url.openConnection();     

      connection.setDoInput(true);  

      connection.connect();    

      InputStream input = connection.getInputStream();  

      BitmapFactory.Options options = new BitmapFactory.Options(); 

      Bitmap myBitmap = BitmapFactory.decodeStream(input, null, options); 

      return myBitmap; 

     } catch (IOException e) {    
      e.printStackTrace();     
      return null;     
     } 
    } 

समस्या यह है कि इनपुटस्ट्रीम का डीकोडिंग हमेशा एक छोटा 16x16 बिटमैप देता है। अगर मुझे अच्छी तरह से समझ में आता है, तो एक एकल .ICO फ़ाइल विभिन्न छवि संकल्पों को स्टोर कर सकती है, जैसे कि 32x32 और 64x64। मेरा सवाल है, क्या 16x16 के बजाय 32x32 या 64x64 बिटमैप को डीकोड करने का कोई तरीका है?

इसके अलावा, अगर बिटमैप फैक्ट्री के साथ कोई समाधान नहीं है, तो क्या ऐसा करने के लिए कोई लाइब्रेरी या जावा कोड है?

नोट: मैं बिटमैप का आकार बदलना नहीं चाहता, मैं छवि गुणवत्ता को खोने के बिना 32x32 (या बड़ा) संकल्प चाहता हूं।

अग्रिम धन्यवाद।

+0

शायद यह विशिष्ट .ico में केवल 16x16 संस्करण है? –

+0

मुझे ऐसा नहीं लगता है, अगर आप अपने ब्राउज़र पर www.google.com/favicon.ico टाइप करते हैं तो यह आपको 32x32 छवि प्रस्तुत करता है। जब तक मैं कुछ याद नहीं कर रहा हूं, यह दिखाता है कि फ़ाइल में कम से कम 32x32 छवि एन्कोड की गई है। बिटमैप फैक्ट्री या तो, किसी कारण से 32x32 संस्करण को स्केल कर रहा है, या एक और संस्करण है, फ़ाइल में 16x16 भी एन्कोड किया गया है और बिटमैप फैक्ट्री उसको डीकोड करने के लिए तैयार है। –

+0

@ डेविडनेटो मुझे नहीं पता था कि आप इस तरह से एक आईको फ़ाइल को पढ़ और डीकोड कर सकते हैं। क्या आप वास्तव में उस 16x16 छवि को प्रदर्शित कर सकते हैं? – quinestor

उत्तर

1

फेविकॉन फ़ाइल में मल्टीप्लेक्स आइकन हो सकते हैं, आमतौर पर 16x16 में से एक और 32x32 में से एक। इस पर निम्नलिखित धागे में चर्चा की गई है: How to have multiple favicon sizes, yet serve only a 16x16 by default?

यह Google के फेविको के मामले में है। यदि आप फ़ाइल www.google.com/favicon.ico फ़ाइल डाउनलोड करने का प्रयास करते हैं और इसे इरफान व्यू पर एप्लिकेशन के साथ खोलें, तो आप देख सकते हैं कि दो आइकन (16x16 और 32x32) हैं।

अपने प्रश्न का उत्तर देने के लिए, आपको image4j जैसे कई आइकनों को निकालने के लिए उचित लाइब्रेरी का उपयोग करना चाहिए, और आपको जिसकी आवश्यकता है उसे चुनें।

http://image4j.sourceforge.net/

+1

आपके उत्तर के लिए धन्यवाद। दुर्भाग्यवश, पुस्तकालय एंड्रॉइड में काम नहीं करता है।जाहिर है, यह कुछ वर्गों का उपयोग करता है, उदाहरण के लिए BufferedImage, जो जावा लाइब्रेरी java.awt.image से संबंधित है, जो एंड्रॉइड पर मौजूद नहीं है। जो मैंने समझा है, उससे यह लाइब्रेरी ग्राफिक्स हैंडलिंग को नियंत्रित करने वाली है, और एंड्रॉइड इसे अलग तरीके से करता है। –

+0

आप सही हैं, आपको एंड्रॉइड के लिए एक समान पुस्तकालय की आवश्यकता है, और मुझे नहीं पता कि कोई है या नहीं। शायद इस सवाल पर एक नज़र डालें: [BitmapFactory.decodeFile हैंडल .ICO (विंडोज़ आइकन) फ़ाइलें?] (Http://stackoverflow.com/a/2690923/2482928), जो उल्लेख करती है कि आईसीओ पार्सिंग के लिए एक एंड्रॉइड स्रोत है । आप अपने फेविकॉन को पार्स करने के लिए इसका इस्तेमाल कर सकते हैं। – Thire

2

मैं जानता हूँ कि प्रश्न 3 साल पहले कहा गया था, लेकिन मैं बहुत ही समस्या का सामना करना पड़ा और ico4a में image4j के एक हिस्से को, जिसे आप यहां पा सकते हैं ढाल लिया है: https://github.com/divStar/ico4a (मैं इसे अपने आप लिखा था क्योंकि मैं एक फेविकॉन से सबसे बड़ी छवि लोड करना चाहता था; क्योंकि image4j एडब्ल्यूटी-क्लासेस का उपयोग करता है, जो एंड्रॉइड के लिए आसानी से उपलब्ध नहीं है, मैंने इसे इतना बनाया है कि ico4a ज्यादातर देशी एंड्रॉइड कक्षाओं का उपयोग करता है)।

यह बिटमैप-ऑब्जेक्ट्स की सूची में सबसे मान्य आईसीओ-फाइलों को डीकोड कर सकता है। मेरा मानना ​​है कि या तो लाइब्रेरी स्वयं या नमूना अनुप्रयोग में सबसे बड़ी बिटमैप-ऑब्जेक्ट को पुनर्प्राप्त करने का एक तरीका भी है।

हालांकि, मेरी लाइब्रेरी आईसीओ-फाइलें लिखने में सक्षम नहीं है; यह केवल उन्हें पढ़ सकता है। कुछ अंतर्निहित एंड्रॉइड कार्यक्षमता का उपयोग करते हुए आप व्यक्तिगत छवियों को आसानी से पीएनजी या जेपीईजी ग्राफिक्स के रूप में सहेज सकते हैं।

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

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