में बिट स्ट्राइपिंग में मेरे पास 32 बिट प्रोसेसर पर चल रहे आर, जी, बी बिट डेटा वाले 3 बफर हैं।सी
मैं निम्नलिखित तरीके से तीन बाइट्स गठबंधन करने के लिए की जरूरत है:
R[0] = 0b r1r2r3r4r5r6r7r8
G[0] = 0b g1g2g3g4g5g6g7g8
B[0] = 0b b1b2b3b4b5b6b7b8
int32_t Out = 0b r1g1b1r2g2b2r3g3 b3r4g4b4r5g5b5r6 g6b6r7g7b7r8g8b8 xxxxxxxx
जहां XXXXXXXX बफ़र्स में अगले बाइट्स से प्रत्येक के लिए पर जारी है।
मैं उन्हें गठबंधन करने का एक इष्टतम तरीका ढूंढ रहा हूं। मेरा दृष्टिकोण निश्चित रूप से कुशल नहीं है।
यहाँ मेरी दृष्टिकोण
static void rgbcombineline(uint8_t line)
{
uint32_t i, bit;
uint8_t bitMask, rByte, gByte, bByte;
uint32_t ByteExp, rgbByte;
uint8_t *strPtr = (uint8_t*)&ByteExp;
for (i = 0; i < (LCDpixelsCol/8); i++)
{
rByte = rDispbuff[line][i];
gByte = gDispbuff[line][i];
bByte = bDispbuff[line][i];
bitMask = 0b00000001;
ByteExp = 0;
for(bit = 0; bit < 8; bit++)
{
rgbByte = 0;
rgbByte |= ((rByte & bitMask) >> bit) << 2;
rgbByte |= ((gByte & bitMask) >> bit) << 1;
rgbByte |= ((bByte & bitMask) >> bit);
ByteExp |= (rgbByte << 3*bit);
bitMask <<= 1;
}
TempLinebuff[((i*3)+0) +2] = *(strPtr + 2);
TempLinebuff[((i*3)+1) +2] = *(strPtr + 1);
TempLinebuff[((i*3)+2) +2] = *(strPtr + 0);
}
}
आप (या नहीं) बेहतर प्रतिक्रिया मिल सकता है @ codereview.stackexchange.com –
पर्यावरण पर वहाँ विशेष विचार कर रहे हैं विवरण? यदि आप प्रोसेसर सुविधाओं का फायदा उठा सकते हैं तो एक बहुत तेज़ समाधान हो सकता है। – nneonneo
मुझे उलझन में है कि इस सवाल को तब तक खुला रहने की अनुमति क्यों दी जाती है जब हर दिन प्रश्नों को वोट दिया जाता है और कोड समीक्षा को संदर्भित किया जाता है, भले ही सवाल इस गुणवत्ता का है। क्या कोई समझा सकता है? – Insane