विंडोज़ में RTL_BITMAP
डेटा संरचना है जो इसके एपीआई के साथ उपयोग कर सकती है।
लेकिन मैं इस कुछ समय पहले के लिए कोड की जरूरत है, और इसलिए मैं इसे यहाँ लिखा था (चेतावनी, यह एक छोटे बदसूरत है):
https://gist.github.com/3206128
मैं केवल आंशिक रूप से यह परीक्षण किया है, तो यह अभी भी हो सकता है बग (विशेष रूप से reverse
पर)। लेकिन एक हालिया संस्करण (केवल इस से थोड़ा अलग) मेरे लिए उपयोग करने योग्य लग रहा था, इसलिए यह एक कोशिश के लायक है।
पूरे बात के लिए मौलिक संचालन करने में सक्षम किया जा रहा है - जल्दी - बिट्स की एक रन की लंबाई ज्ञात:
long long GetRunLength(
const void *const pBitmap, unsigned long long nBitmapBits,
long long startInclusive, long long endExclusive,
const bool reverse, /*out*/ bool *pBit);
बाकी सब कुछ इस पर निर्माण करने के लिए आसान होना चाहिए, इसकी बहुमुखी प्रतिभा को देखते हुए।
मैंने कुछ एसएसई कोड शामिल करने का प्रयास किया, लेकिन यह प्रदर्शन में उल्लेखनीय रूप से सुधार नहीं हुआ। हालांकि, सामान्य रूप से, कोड बिट-बिट-बिट विश्लेषण करने से कई गुना तेज होता है, इसलिए मुझे लगता है कि यह उपयोगी हो सकता है।
यदि आप vector<bool>
के बफर को किसी भी तरह पकड़ सकते हैं तो परीक्षण करना आसान होना चाहिए - और यदि आप विजुअल सी ++ पर हैं, तो एक ऐसा फ़ंक्शन है जिसमें मैंने शामिल किया है जो आपके लिए करता है। अगर आपको बग मिलती है, तो मुझे बताने में संकोच न करें।
आप पूर्णांकों का एक सरणी के रूप में अपने सरणी का इलाज और शून्य पूर्णांक तुलना नहीं कर सकते? – Andrew
@Andrew: यह इस बात पर निर्भर करता है कि आप क्या हासिल करने की कोशिश कर रहे हैं ... बिट्स को एक समय में 8 बिट्स को गठबंधन नहीं किया जा सकता है। – Mehrdad
आप 6 बाइट्स की एक सरणी के साथ 6 बाइट्स की तुलना कर सकते हैं (यदि बीएमपी एक रंग छवि फ़ाइल है: 6 बाइट दो contigouous पिक्सल है)। –