मैं एक मोबाइल ब्लूटूथ प्रिंटर (बिक्सोलन एसपीपी-आर 200) में बिटमैप प्रिंट करना चाहता हूं - एसडीके एक मेमोरी प्रिंट करने के लिए सख्त तरीकों की पेशकश नहीं करता है छवि। एक मोनोक्रोम बिटमैप करने के लिएएंड्रॉइड: एक बिटमैप को एक मोनोक्रोम बिटमैप में परिवर्तित करना (1 बिट प्रति पिक्सेल)
Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
: तो मैं इस तरह एक बिटमैप परिवर्तित करने के बारे में सोचा। मैं एक कैनवास का उपयोग कर उपरोक्त दिए गए बिटमैप पर काले पाठ खींच रहा हूं, जो अच्छी तरह से काम करता है। हालांकि, जब मैं उपरोक्त बिटमैप को बाइटएरे में परिवर्तित करता हूं, तो प्रिंटर उन बाइट्स को संभालने में असमर्थ लगता है। मुझे संदेह है कि मुझे एक बिट प्रति पिक्सेल के साथ एक ऐरे की आवश्यकता है (एक पिक्सेल या तो सफेद = 1 या काला = 0 होगा)।
bitmap.getPixels(pixels, offset, stride, x, y, width, height)
पिक्सल प्राप्त करने के लिए:
वहाँ बॉक्स तरीका है कि ऐसा करने के लिए से बाहर, कोई सुविधाजनक हो रहा है के रूप में, एक विचार मैं था इस्तेमाल किया गया। मुझे लगता है मैं इसे उपयोग करने के लिए इस प्रकार होगा,:
int width = bitmap.getWidth();
int height = bitmap.getHeight();
int [] pixels = new int [width * height];
bitmap.getPixels(pixels, 0, width, 0, 0, width, height);
हालांकि - मैं कुछ चीजों के बारे में सुनिश्चित नहीं हूं:
- getPixels में - यह मतलब है बस के रूप में पारित करने के लिए चौड़ाई "स्ट्रइड" तर्क?
- मुझे लगता है कि मुझे प्रत्येक पिक्सेल की रंगीन जानकारी का मूल्यांकन करना होगा और या तो इसे काला या सफेद पर स्विच करना होगा (और मैं इस मान को एक नए लक्ष्य बाइट सरणी में लिखूंगा जिसे मैं आखिरकार प्रिंटर पर भेजूंगा)?
- यह तय करने के लिए कि यह काला या सफेद होना चाहिए, प्रत्येक पिक्सेल रंग की जानकारी का सर्वोत्तम मूल्यांकन कैसे करें? (गाया बिटमैप एक सफेद पृष्ठभूमि पर काले दर्द है)
इस दृष्टिकोण बिल्कुल मतलब है? क्या कोई आसान तरीका है? बिटमैप ब्लैक & सफेद बनाने के लिए पर्याप्त नहीं है, मुख्य मुद्दा प्रत्येक पिक्सेल के लिए रंग जानकारी को एक बिट में कम करना है।
अद्यतन
के रूप में सुझाव दिया रूबेन द्वारा मैं पहली बार एक मोनोक्रोम बिटमैप करने के लिए बिटमैप बदल देंगे। और फिर मैं प्रत्येक पिक्सेल से अधिक पुनरावृति होगी:
int width = bitmap.getWidth();
int height = bitmap.getHeight();
int[] pixels = new int[width * height];
bitmap.getPixels(pixels, 0, width, 0, 0, width, height);
// Iterate over height
for (int y = 0; y < height; y++) {
int offset = y * height;
// Iterate over width
for (int x = 0; x < width; x++) {
int pixel = bitmap.getPixel(x, y);
}
}
अब रूबेन "प्रत्येक 32-बिट पिक्सेल का सबसे कम बाइट पढ़ें" करने का सुझाव दिया - कि कैसे पिक्सेल रंग का मूल्यांकन करने के बारे में मेरे सवाल से संबंधित होगा। इस संबंध में मेरी आखिरी सवाल: मैं बस ऐसा करने से सबसे कम बाइट मिलता है:
// Using the pixel from bitmap.getPixel(x,y)
int lowestByte = pixel & 0xff;
मैं इस क्यूए अभिनय किया है क्योंकि मैं एक ऐसी ही अवधारणा पर काम कर रहा था मोनोक्रोम बिटमैप्स बनने के लिए प्रोग्रामेटिक रूप से एरेज़ में हेरफेर करने के संबंध में। मेरे पास एक प्रश्न है और इसका अंतिम उत्तर यहां दिया गया है: http://stackoverflow.com/questions/17918978/plot-an-array-into-bitmap-in-cc-for-thermal-printer अगर यह लोगों की सहायता करता है, तो कृपया मुझे ईमेल करें और मैं इस प्रश्न के उपयुक्त उत्तर के साथ आऊंगा। –
क्यों आप एक ही सरणी में सभी पिक्सल लोड करने के लिए GetPixels उपयोग कर रहे हैं ... तो फिर बिटमैप के माध्यम से फिर से (कम से कम प्रभावी तरीके से) पाशन व्यक्ति GetPixel कॉल बुला नेस्ट? बस अपनी मूल सरणी के माध्यम से लूप करें, फिर संपूर्ण सरणी को वापस बिटमैप में धक्का देने के लिए SetPixels का उपयोग करें। –
@ClintStLaurent अच्छा बिंदु - कोड वास्तव में पुराना एक्सडी है - मुझे यह भी नहीं लगता कि हम इसे इस रूप में उपयोग कर रहे हैं, लेकिन जैसा कि आपने सही तरीके से बताया है, यह बहुत ही अक्षम है जिस तरह से यह लिखा गया है। अपने सुझाव के अनुसार इसे संपादित करने के लिए स्वतंत्र महसूस करें। – AgentKnopf