कुछ भी आपको जीडीआई के साथ मदद नहीं करेगा। ऐसा लगता है कि माइक्रोसॉफ्ट के लिए माइक्रोसॉफ्ट की देखभाल करने के लिए अनुक्रमित छवियां बहुत पिछड़ी हैं। आप जो भी कर सकते हैं वह अनुक्रमित छवि फ़ाइलों को पढ़ और लिखना है।
आमतौर पर दो कदम जब एक छवि में quantizing रंग के होते हैं:
1) छवि के लिए सबसे अच्छा पैलेट (रंग परिमाणीकरण)
2) मानचित्र पाया पैलेट स्रोत solors (रंग मैपिंग) का पता लगाएं
जो मैं समझता हूं, उससे पहले आपके पास डेटाबेस में पैलेट है, जिसका मतलब है कि आपके लिए सबसे कठिन हिस्सा किया गया है। आपको बस इतना करना है कि प्रदान किए गए पैलेट रंगों में 24 बिट रंगों को मानचित्र करें। यदि आपके पास प्रारंभिक पैलेट नहीं है, तो आपको क्वांटिसेशन एल्गोरिदम का उपयोग करके स्वयं को गणना करना होगा: ऑक्टिस या मेडियन कट सबसे प्रसिद्ध हैं। मध्य कट बेहतर परिणाम देता है लेकिन लागू करने और ठीक धुन के लिए धीमा और कठिन है।
रंगों को मैप करने के लिए, आपके मामले में सबसे सरल एल्गोरिदम आपके स्रोत रंग से दूरी को सभी पैलेट रंगों तक दूरी की गणना करना और निकटतम चुनना है।
float ColorDistanceSquared(Color c1, Color c2)
{
float deltaR = c2.R - c1.R;
float deltaG = c2.G - c1.G;
float deltaB = c2.B - c1.B;
return deltaR*deltaR + deltaG*deltaG + deltaB*deltaB;
}
तुम भी चैनलों ponderate कर सकते हैं ताकि नीले कम वजन है, इसके साथ भी पानी में गिर मत जाओ, वरना यह भयानक परिणाम देगा, विशेष रूप से 30/59/11 बिल्कुल काम नहीं होगा:
float ColorDistanceSquared(Color c1, Color c2)
{
float deltaR = (c2.R - c1.R) * 3;
float deltaG = (c2.G - c1.G) * 3;
float deltaB = (c2.B - c1.B) * 2;
return deltaR*deltaR + deltaG*deltaG + deltaB*deltaB;
}
सभी स्रोतों और पैलेट रंगों के लिए उस चीज़ को कॉल करें और न्यूनतम खोजें। यदि आप मानचित्र में जाते समय अपने परिणामों को कैश करते हैं, तो यह बहुत तेज़ होगा।
इसके अलावा, स्रोत रंग शायद ही कभी पैलेट रंग फिट करेगा जो बैंडिंग और सादे क्षेत्रों को बनाने और आपकी छवि में विवरणों के नुकसान को पर्याप्त बनाने के लिए पर्याप्त नहीं होगा। इससे बचने के लिए, आप डाइटिंग का उपयोग कर सकते हैं। सबसे सरल एल्गोरिदम और जो सर्वोत्तम परिणाम देता है वह त्रुटि डिफ्यूजन डाइटिंग है।
एक बार जब आप अपने रंग मैप करते हैं, तो आपको मैन्युअल रूप से बिटमैप को लॉक करना होगा और वहां इंडेक्स लिखना होगा क्योंकि नेट आपको अनुक्रमित छवि पर लिखने नहीं देगा।
+1, अच्छा सवाल! –