icon格式软解码
说是icon格式,实际上只是将 XOR 图直接画在窗口上,搞清格式就不,有点一相不通为什么要把数据倒过来存储。
图标(ico,cur)文件的结构解析_ico文件格式解析-CSDN博客
void IconToBuf(HDC hdc, int x0, int y0, LPBITMAPINFOHEADER bi) {WORD *buf;//信息头之后是调色板,数量与biBitCount有关LPRGBQUAD palettePtr = (LPRGBQUAD) ((DWORD) bi + bi->biSize);//调色板之后是XOR位图的数据PBYTE xordata;//XOR位图的数据PWORD anddata;int bit, mod;int count = ((bi->biHeight) * (bi->biWidth) / 4);//数据顺序为: 从左到右,从下向上。而液晶屏加载显示顺序为:从左到右,从上向下。需要重新定位!buf =hdc->vram+ (x0 + (y0 + bi->biHeight / 2 - 1) * hdc->nWidth) * VBE_BPP;xordata = (PBYTE) ((DWORD) palettePtr+ (sizeof(RGBQUAD) * (1 << bi->biBitCount)));//KPrintf("icon %d,%d,%x!\n", bi->biHeight, bi->biWidth, xordata);for (int i = 0; i < bi->biHeight / 2; i++) {for (bit = 0; bit < bi->biWidth; bit++) {mod = ((*xordata) >> (((bit + 1) % 2) << 2)) & 0xf;*buf = rgb(palettePtr[mod].rgbRed, palettePtr[mod].rgbGreen,palettePtr[mod].rgbBlue);buf++;xordata += (bit % 2);}buf -= (bit + hdc->nWidth);}}