我有一個奇怪的圖像格式嵌入式設備這裏使用,和往常一樣的文檔是沒有幫助...轉換RGB 444可顯示圖像
下面是文檔的兩行:
該圖像是:
全綵色位圖(4 + 4 +每像素4位),3個字節的每2 像素(從左至右pixelorder)。
因此,爲了能夠得到一個像我們的字節序列中,我已經編寫如下:
// size_x and size_y are known at this point
QImage img(size_x, size_y, QImage::Format_RGB444);
int xctr = 0;
int yctr = 0;
for(int c1 = 0; c1 < bsize;) // bsize is the size of image bytes
{
static const int M = 1; // a multiplier to make the image brighter
uint8_t b1 = *(p_pos + c1++); // p_pos points to the first image byte
uint8_t b2 = *(p_pos + c1++);
uint8_t b3 = *(p_pos + c1++);
uint8_t pix1_r =((b1 & 0xF0) >> 4) * M;
uint8_t pix1_g =((b1 & 0xF)) * M;
uint8_t pix1_b =((b2 & 0xF0) >> 4) * M;
uint8_t pix2_r =((b2 & 0xF)) * M;
uint8_t pix2_g =((b3 & 0xF0) >> 4) * M;
uint8_t pix2_b =((b3 & 0xF)) * M;
// old code
//unsigned int pix1 = pix1_r << 8 | pix1_g << 4 | pix1_b;
//unsigned int pix2 = pix2_r << 8 | pix2_g << 4 | pix2_b;
// new code
unsigned int pix1 = ((unsigned int)pix1_r) << 8 | pix1_g << 4 | pix1_b;
unsigned int pix2 = ((unsigned int)pix2_r) << 8 | pix2_g << 4 | pix2_b;
// set the first pixel
img.setPixel(xctr, yctr, pix1);
xctr ++;
if(xctr == size_x) {
xctr = 0;
yctr ++;
}
// set the second pixel
img.setPixel(xctr, yctr, pix2);
xctr ++;
if(xctr == size_x) {
xctr = 0;
yctr ++;
}
}
這裏是我得到從這個結果的圖像:
這裏是一個圖像(非常相似,)我應該得到(只有藍色/紅色的部分,請不要考慮黑色的背景和雪:)):
對於膽大的,圖像數據:http://pastebin.com/m4y8qamB請隨時使用這個Python creating an array from hex bytes原始數據爲「真正的」十六進制字節轉換。
問題:現在,忽略嵌入設備本身的圖像調色板,我錯誤地做了什麼,我沒有獲得與預期類似的圖像?我應該怎麼做才能獲得類似的圖像?
編輯將解碼值(和印刷字符)的一些打印完成後,我得到的是這樣的:
PPPPPPPPPPPPPPPPPPPAPPPPPPPPPPPP
PPPPPPPAPPPPPPPPPPPPPPPPPPPAPPPP
PPPPPPPPPPPPPPPAPPPPPPPPPPPPPPPP
PPPAPPPPPPPPPPPPPPPPPPPAPPPPPPPP
PPPPPPPPPPPAPPPPPPPPPPPPPPPPPPPA
PPPPPPPPPPPPPPPPPPPAPPPPPPPPPPPP
PPPPPPPAPPPPPPPPPPPPPPPPPPPAPPPP
PGPPPPPPPPPPPPPAPPPPPCANMMMMMMMM
MMMMAMMMMOPCALDDDDDDDDDDDADDDMPC
ANODDDDDDDDDDDDADDKPANPCAGMMMMMM
MMMMMMAMMNPCANPCANPCANPCANPCANPC
ANPCANPPPAPPANPCANPCANPCANPCANPC
ANPCANPCADDADDPCANPCANPCANPCANPC
ANPCANPCANPCMMAMMMMMMMMMMMMMMMMM
MMAMMMMMMMMMMMMMMMMMMMAMMMMMMMMM
MMMMMMMMMMAMMMMMMMMMMMMMMMMMMMAM
MMMMMMMMMMMMMMMMMMAMMMMMMMMMMMMM
MMMMMMAMMMMMMMMMMMMMMMMMMMAMMMMM
MMMMMMMMMMMMMMAMMMMMMMMMMMMMMMMM
MMAMMMMMMMMMMMMMMMMMMMAMMMMMMMMM
您是否檢查過size_x和size_y,如果它們正常?這個結果看起來像比原來的比例有所不同。 –
在'pix1_r << 8','pix1_r'是8位變量,做8位移位將使其零,我建議你把它強制轉換爲16位或32位。 –
它們也與圖像字節一起編碼在圖像數據中(請參閱pastebin)。我一直沒有使用方形像素的感覺,原來,因爲它是33x18) – fritzone