android - प्रतीक के लिए मिपमैप drawables




android-drawable mipmaps (8)

एक बात जो मैंने किसी अन्य धागे में उल्लिखित की है, वह इंगित करने योग्य है - यदि आप अलग-अलग घनत्व के लिए अपने ऐप के विभिन्न संस्करणों का निर्माण कर रहे हैं, तो आपको "mipmap" संसाधन निर्देशिका के बारे में पता होना चाहिए। यह बिल्कुल "खींचने योग्य" संसाधनों की तरह है, सिवाय इसके कि यह विभिन्न एपीके लक्ष्यों को बनाते समय घनत्व अलग करने में भाग नहीं लेता है।

plus.google.com/105051985738280261832/posts/QTA9McYan1L

एंड्रॉइड 4.3 (जेली बीन) के बाद से हम अब "mipmap" छवियों को स्टोर करने के लिए res/mipmap फ़ोल्डर्स का उपयोग कर सकते हैं।

उदाहरण के लिए, एंड्रॉइड के लिए क्रोम अधिक सामान्य res/drawable फ़ोल्डरों की बजाय इन फ़ोल्डरों में अपने आइकन संग्रहीत करता है।

ये mipmap छवियां अन्य परिचित चित्रकारी छवियों से अलग कैसे हैं?

मैं देखता हूं कि मेरे मैनिफेस्ट में, हम @mipmap/ बजाय @mipmap/ qualifier का उपयोग करते हैं, जो संसाधन फ़ोल्डर नाम को समझ में आता है:

<activity
    android:name=".MipmapDemp"
    android:icon="@mipmap/ic_launcher" />

संदर्भ:

एंड्रॉइड 4.3 एपीआई दस्तावेज़ में निम्नलिखित कहने के लिए निम्न है:

अपने बिटमैप या ड्रॉबल के स्रोत के रूप में एक मिपमैप का उपयोग करना एक गुणवत्ता छवि और विभिन्न छवि स्केल प्रदान करने का एक आसान तरीका है, जो विशेष रूप से उपयोगी हो सकता है यदि आप एनीमेशन के दौरान अपनी छवि को स्केल करने की अपेक्षा करते हैं।

एंड्रॉइड 4.2 (एपीआई लेवल 17) बिटमैप क्लास-एंड्रॉइड में मिपमैप्स के लिए समर्थन जोड़ा गया है जब आप एक मिपमैप स्रोत की आपूर्ति करते हैं और setHasMipMap () को सक्षम करते हैं तो आपके बिटमैप में एमआईपी छवियों को स्वैप करते हैं। अब एंड्रॉइड 4.3 में, आप बिटमैप ड्रायबल ऑब्जेक्ट के लिए मिपमैप्स को भी सक्षम कर सकते हैं, एक मिपमैप एसेट प्रदान करके और एंड्रॉइड सेट करके: बिटमैप संसाधन फ़ाइल में mipMap विशेषता या हैमैपमैप () को कॉल करके।

मुझे वहां कुछ भी नहीं दिख रहा है जो मुझे समझने में मदद करता है।

एक्सएमएल बिटमैप संसाधनों में android:mipMap संपत्ति:

बूलियन। Mipmap संकेत सक्षम या अक्षम करता है। अधिक जानकारी के लिए setHasMipMap () देखें। डिफ़ॉल्ट मान गलत है।

यह लॉन्चर आइकन पर लागू नहीं होता है, जहां तक ​​मैं देख सकता हूं।

प्रश्न Google समूह ( संसाधन नाम "mipmap" का उद्देश्य) पर उठाया गया था, जिस पर रोमैन गाय ने जवाब दिया:

एक बड़े रिज़ॉल्यूशन पर एक छवि प्रदान करना उपयोगी होता है जिसे सामान्य रूप से गणना की जाएगी (उदाहरण के लिए, एक एमडीपीआई डिवाइस पर, लॉन्चर बड़ा ऐप शॉर्टकट प्रदर्शित करने के लिए बड़ा एचडीपीआई आइकन चाहता है।)

मुझे लगता है कि यह लगभग इसके बारे में समझ में आता है, लेकिन काफी नहीं।

मैं अभी भी रैंडी शुगियांतो के अनुवर्ती अनुवर्ती होने के इच्छुक हूं:

इसका क्या फायदे हैं? क्या कोई गाइड है कि मैपमैप्स का उपयोग कैसे करें, शायद बेहतर लॉन्चर आइकन के लिए?

बेशक, विकिपीडिया के पास "मिपमैप" का एक पृष्ठ है , जो 1 9 83 में आविष्कार की गई एक पुरानी तकनीक को संदर्भित करता है, कि मैं वर्तमान एंड्रॉइड कार्यान्वयन से काफी संबंधित नहीं हो सकता।

क्या हमें इन दिनों हमारे सभी ऐप आइकन res/mipmap फ़ोल्डर्स में संग्रहीत करना चाहिए, और इन मिपमैप छवियों के लिए दिशानिर्देश क्या हैं?

अद्यतन # 1

यहां एक ब्लॉग पोस्ट है जो इसे थोड़ा सा समझाने की कोशिश करता है।

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

क्रोम के mipmap-hdpi फ़ोल्डर में तीन छवियां हैं। एक क्रोम लोगो है, अपने आप पर।

आश्चर्यजनक रूप से, यह 72x72 है, 48x48 नहीं जो मुझे देखने की उम्मीद है।

शायद यह सब कुछ है - हमें बस मिपमैप फ़ोल्डरों में बड़े आइकन रखने की जरूरत है?

अद्यतन # 2

23/10/2014 के एंड्रॉइड डेवलपर्स ब्लॉग पोस्ट ने एप्लिकेशन आइकन के लिए mipmap फ़ोल्डर्स का उपयोग करने के विचार को फिर से पुष्टि की है:

नेक्सस 6 स्क्रीन घनत्व के बारे में बात करते समय, लेखक लिखते हैं:

अपने ऐप आइकन को मिपमैप-फ़ोल्डरों में डालने का सबसे अच्छा अभ्यास है (ड्रॉबल-फ़ोल्डर्स नहीं) क्योंकि इन्हें डिवाइस के वर्तमान घनत्व से अलग संकल्पों में उपयोग किया जाता है। उदाहरण के लिए, xxhdpi ऐप आइकन को xxhdpi डिवाइस के लिए लॉन्चर पर उपयोग किया जा सकता है।

अद्यतन # 3

ध्यान दें कि एंड्रॉइड स्टूडियो ic_launcher.png में ic_launcher.png आइकनों को बनाता है mipmap... drawable... बजाय फ़ोल्डरों drawable... फ़ोल्डर्स जो ग्रहण उन्हें बनाने के लिए उपयोग किए जाते हैं।


ये mipmap छवियां अन्य परिचित चित्रकारी छवियों से अलग कैसे हैं?

अंतर को समझाने की कोशिश में मेरे दो सेंट यहां दिए गए हैं। एंड्रॉइड में छवियों के साथ काम करते समय आप दो मामलों से निपटते हैं:

  1. आप अपने डिवाइस घनत्व के लिए एक छवि लोड करना चाहते हैं और आप इसके वास्तविक आकार को बदलने के बिना "जैसा है" इसका उपयोग करने जा रहे हैं। इस मामले में आपको ड्रॉबल्स के साथ काम करना चाहिए और एंड्रॉइड आपको सबसे अच्छी फिटिंग छवि देगा।

  2. आप अपने डिवाइस घनत्व के लिए एक छवि लोड करना चाहते हैं, लेकिन इस छवि को ऊपर या नीचे स्केल किया जा रहा है । उदाहरण के लिए जब आप एक बड़ा लॉन्चर आइकन दिखाना चाहते हैं, या आपके पास एक एनीमेशन है, जो छवि के आकार को बढ़ाता है तो इसकी आवश्यकता होती है। ऐसे मामलों में, सर्वोत्तम छवि गुणवत्ता सुनिश्चित करने के लिए, आपको अपनी छवि को मिपमैप फ़ोल्डर में रखना चाहिए। एंड्रॉइड क्या करेगा, यह इसे स्केल करने के बजाय छवि को उच्च घनत्व बाल्टी से लेने का प्रयास करेगा। इससे छवि की तेजता (गुणवत्ता) बढ़ जाएगी।

इस प्रकार, अंगूठे का नियम यह तय करने के लिए कि आपकी छवि कहां रखना है:

  • लॉन्चर आइकन हमेशा mipmap फ़ोल्डर में जाते हैं
  • छवियों, जिन्हें अक्सर स्केल किया जाता है (या अत्यधिक स्केल किया जाता है) और जिनकी गुणवत्ता ऐप के लिए महत्वपूर्ण है, मिपमैप फ़ोल्डर में भी जाएं।
  • अन्य सभी छवियां सामान्य drawables हैं

4.3 में mipmaps का एंड्रॉइड कार्यान्वयन 1 9 83 से विकिपीडिया लेख में समझाया गया तकनीक है :)

मिपमैप सेट की प्रत्येक बिटमैप छवि मुख्य बनावट का एक डाउनसाइज्ड डुप्लिकेट है, लेकिन विस्तार के एक निश्चित स्तर पर। यद्यपि मुख्य बनावट तब भी उपयोग की जाएगी जब दृश्य पूर्ण विवरण में प्रस्तुत करने के लिए पर्याप्त है, तो रेंडरर एक उपयुक्त मिपमैप छवि (...) पर स्विच करेगा जब बनावट दूरी से या छोटे आकार में दिखाई दे।

यद्यपि इसे 3 डी ग्राफिक्स के लिए एक तकनीक के रूप में वर्णित किया गया है (जैसा कि यह "दूरी से देखने" का उल्लेख करता है), यह केवल 2 डी तक लागू होता है (जिसे "खींचा गया एक छोटा स्थान" यानी "डाउनस्केल्ड" कहा जाता है)।

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

हालांकि, आप एक मिपमैप प्रदान कर सकते हैं, जिसका अर्थ है कि छवि पहले से ही कुछ विशिष्ट स्केल के लिए पूर्व-प्रस्तुत की गई है (मान लें 1.0, 0.5, और 0.25)। जब भी एनीमेशन मूल, 1.0-आकार वाली छवि को डाउनस्केल करने के बजाए 0.5 थ्रेसहोल्ड "क्रॉस" करता है, तो यह 0.5 छवि पर स्विच हो जाएगा और इसे डाउनस्केल करेगा, जो बेहतर परिणाम प्रदान करेगा। और एनीमेशन जारी है के रूप में आगे।

यह थोड़ा सैद्धांतिक है, क्योंकि यह वास्तव में प्रस्तुतकर्ता द्वारा किया जाता है। बिटमैप वर्ग के स्रोत के मुताबिक, यह सिर्फ एक संकेत है, और प्रस्तुतकर्ता इसका सम्मान कर सकता है या नहीं।

/**
 * Set a hint for the renderer responsible for drawing this bitmap
 * indicating that it should attempt to use mipmaps when this bitmap
 * is drawn scaled down.
 *
 * If you know that you are going to draw this bitmap at less than
 * 50% of its original size, you may be able to obtain a higher
 * quality by turning this property on.
 * 
 * Note that if the renderer respects this hint it might have to
 * allocate extra memory to hold the mipmap levels for this bitmap.
 *
 * This property is only a suggestion that can be ignored by the
 * renderer. It is not guaranteed to have any effect.
 *
 * @param hasMipMap indicates whether the renderer should attempt
 *                  to use mipmaps
 *
 * @see #hasMipMap()
 */
public final void setHasMipMap(boolean hasMipMap) {
    nativeSetHasMipMap(mNativeBitmap, hasMipMap);
}

मुझे पूरा यकीन नहीं है कि यह एप्लिकेशन आइकन के लिए विशेष रूप से उपयुक्त क्यों होगा। हालांकि टैबलेट पर एंड्रॉइड के साथ-साथ कुछ लॉन्चर्स (जैसे जीईएल), इसे दिखाने के लिए "एक घनत्व उच्च" आइकन का अनुरोध करते हैं, यह नियमित तंत्र (यानी drawable-xxxhdpi , और c) का उपयोग करके किया जाना चाहिए।


ऐसा लगता है कि Google ने इन सभी उत्तरों के बाद से अपने दस्तावेज़ों को अपडेट किया है, इसलिए उम्मीद है कि यह भविष्य में किसी और की मदद करेगा :) एक नया (नया नया) प्रोजेक्ट बनाते समय बस इस सवाल को पूरा कर लिया।

टीएल; डीआर: डीपी-विशिष्ट संसाधन अनुकूलन के हिस्से के रूप में ड्रॉबल्स को हटाया जा सकता है। मिपमैप्स छीन नहीं पाएंगे।

विभिन्न उपकरणों पर विभिन्न होम स्क्रीन लॉन्चर ऐप्स विभिन्न संकल्पों पर ऐप लॉन्चर आइकन दिखाते हैं। जब ऐप संसाधन ऑप्टिमाइज़ेशन तकनीक अप्रयुक्त स्क्रीन घनत्व के लिए संसाधनों को हटाती है, तो लॉन्चर आइकन अस्पष्ट दिखने लगते हैं क्योंकि लॉन्चर ऐप को डिस्प्ले के लिए निम्न-रिज़ॉल्यूशन आइकन को अपस्केल करना पड़ता है। इन प्रदर्शन समस्याओं से बचने के लिए, ऐप्स को लॉन्चर आइकन के लिए mipmap/ संसाधन फ़ोल्डर का उपयोग करना चाहिए। एंड्रॉइड सिस्टम घनत्व अलग करने के बावजूद इन संसाधनों को संरक्षित करता है, और यह सुनिश्चित करता है कि लॉन्चर ऐप्स प्रदर्शन के लिए सर्वोत्तम रिज़ॉल्यूशन वाले आइकन चुन सकें।

( http://developer.android.com/tools/projects/index.html#mipmap )


माइपमैप के बारे में मेरी समझ इस तरह कम या कम है:

जब किसी छवि को खींचा जाना चाहिए, तो हमारे पास अलग-अलग स्क्रीन आकार संकल्प हैं, कुछ स्केलिंग को भाग लेना होगा।

यदि आपके पास एक ऐसी छवि है जो कम अंत सेल फोन के लिए ठीक है, तो जब आप इसे 10 "टैबलेट" आकार के पिक्सेल के आकार में स्केल करते हैं जो वास्तव में मौजूद नहीं है। यह कुछ इंटरपोलेशन एल्गोरिदम के साथ किया जाता है। अधिक पिक्सल का आविष्कार किया जाना चाहिए, जितना अधिक प्रक्रिया लेती है और गुणवत्ता विफल हो जाती है। अधिक जटिल एल्गोरिदम के साथ सर्वोत्तम गुणवत्ता प्राप्त की जाती है जो लंबे समय तक लेती है (उदाहरण के लिए निकटतम पिक्सेल की प्रतिलिपि बनाकर आसपास के पिक्सल का औसत)।

आविष्कार किए जाने वाले पिक्सेल की संख्या को कम करने के लिए, मिपमैप के साथ आप एक ही छवि के विभिन्न आकार / rsolutions प्रदान करते हैं, और सिस्टम उस संकल्प के लिए निकटतम छवि का चयन करेगा जिसे प्रस्तुत किया जाना चाहिए और वहां से स्केलिंग करना है। यह एक अच्छी गुणवत्ता वाली छवि प्रदान करने के लिए इन पिक्सेल की गणना में उपयोग किए जाने वाले संसाधनों को सहेजने वाले आविष्कार किए गए पिक्सल की संख्या को कम करना चाहिए।

छवियों को स्केल करते समय मैंने libgdx में प्रदर्शन समस्या को समझाते हुए एक लेख में इस बारे में पढ़ा:

http://www.badlogicgames.com/wordpress/?p=1403


मिपमैप्स के दो अलग-अलग उपयोग हैं:

  1. घनत्व विशिष्ट एपीके बनाने के दौरान लॉन्चर आइकन के लिए। एपीके आकार को कम रखने के लिए कुछ डेवलपर्स प्रत्येक घनत्व के लिए अलग-अलग एपीके बनाते हैं। हालांकि कुछ लॉन्चर्स (कुछ डिवाइसों के साथ भेजे गए हैं, या Play Store पर उपलब्ध हैं) मानक 48 डीपी की तुलना में बड़े आइकन आकार का उपयोग करते हैं। लॉन्चर्स getDrawableForDensity का उपयोग करते हैं और आवश्यकता होने पर स्केल डाउन करते हैं, इसलिए आइकन उच्च गुणवत्ता वाले होते हैं। उदाहरण के लिए एक एचडीपीआई टैबलेट पर लॉन्चर xhdpi आइकन लोड कर सकता है। Mipmap-xhdpi निर्देशिका में अपना लॉन्चर आइकन डालकर, इसे एचडीपीआई उपकरणों के लिए एपीके बनाने के दौरान ड्रॉइंग-एक्सएचडीपीआई निर्देशिका के तरीके को तोड़ दिया नहीं जाएगा। यदि आप सभी उपकरणों के लिए एक एकल एपीके बना रहे हैं, तो यह वास्तव में कोई फर्क नहीं पड़ता क्योंकि लॉन्चर वांछित घनत्व के लिए खींचने योग्य संसाधनों तक पहुंच सकता है।

  2. 4.3 से वास्तविक mipmap एपीआई। मैंने इसका इस्तेमाल नहीं किया है और इससे परिचित नहीं हूं। इसका उपयोग एंड्रॉइड ओपन सोर्स प्रोजेक्ट लॉन्चर्स द्वारा नहीं किया जाता है और मुझे किसी अन्य लॉन्चर का उपयोग करने के बारे में पता नहीं है।


विभिन्न घनत्व के लिए अलग-अलग एपीके का निर्माण करते समय, अन्य घनत्वों के लिए खींचने योग्य फ़ोल्डर्स छीन जाते हैं। यह आइकन उन डिवाइसों में धुंधला दिखाई देगा जो उच्च घनत्व के लॉन्चर आइकन का उपयोग करते हैं। चूंकि, मिपमैप फ़ोल्डरों को छीन लिया नहीं जाता है, इसलिए लॉन्चर आइकन को शामिल करने के लिए उनका उपयोग करना हमेशा सर्वोत्तम होता है।








mipmaps