2011-04-20 6 views
8

इस वाक्य क्या मतलब है:बिटमैप स्ट्रइड और 4 बाइट रिलेशनशिप?

स्ट्राइड संपत्ति, बाइट में एक पंक्ति की चौड़ाई रखती है। हालांकि पंक्ति का आकार पिक्सेल आकार का सटीक एकाधिक नहीं हो सकता है क्योंकि दक्षता के लिए, सिस्टम यह सुनिश्चित करता है कि डेटा पंक्तियों में पैक किया गया है जो चार बाइट सीमा से शुरू होता है और चार बाइट्स के एकाधिक में पैड किया जाता है।

+0

[ग # scan0 और डगों] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/5691955/c-scan0-and-stride) –

+0

धन्यवाद उपयोगी ... –

उत्तर

5

स्ट्रैड गद्देदार है। इसका मतलब है कि यह 4. के निकटतम गुणज में पूर्णांकित हो जाता है (यह मानते हुए 8 बिट ग्रे, या पिक्सेल प्रति 8 बिट):

Width | stride 
-------------- 
1  | 4 
2  | 4 
3  | 4 
4  | 4 
5  | 8 
6  | 8 
7  | 8 
8  | 8 
9  | 12 
10 | 12 
11 | 12 
12 | 12 

आदि

सी # में, आप इस तरह यह लागू हो सकता है :

static int PaddedRowWidth(int bitsPerPixel, int w, int padToNBytes) 
{ 
    if (padToNBytes == 0) 
     throw new ArgumentOutOfRangeException("padToNBytes", "pad value must be greater than 0."); 
    int padBits = 8* padToNBytes; 
    return ((w * bitsPerPixel + (padBits-1))/padBits) * padToNBytes; 
} 

static int RowStride(int bitsPerPixel, int width) { return PaddedRowWidth(bitsPerPixel, width, 4); } 
8

इसका मतलब है कि आपकी छवि चौड़ाई 17 पिक्सल है और रंग के लिए 3 बाइट्स के साथ, आपको 51 बाइट मिलते हैं। तो बाइट्स में आपकी छवि चौड़ाई 51 बाइट्स है, तो चौड़ाई 52 बाइट्स है, जो कि अगले 4-बाइट सीमा तक गोल बाइट्स में छवि चौड़ाई है।

+0

कदम हमेशा 4 के गुणक है ? –

4

मैं आपको एक उदाहरण देता हूँ:

इसका मतलब यह है कि अगर चौड़ाई 160 है, स्ट्राइड 160 हो जाएगा लेकिन अगर चौड़ाई 161 है, तो कदम होगा 164.

+0

हमेशा 4 का गुणक है? –

+0

हां। यह एक विंडोज़ बिटमैप चीज है। यदि आप ओपनसीवी का उपयोग करते हैं, तो इसमें कोई रास्ता नहीं है। – Aliostad