while(cinfo.output_scanline < cinfo.output_height)
{
row_pointer[0]=&pRGB[cinfo.output_scanline*cinfo.image_width*cinfo.num_components];
jpeg_read_scanlines(&cinfo, row_pointer, 1);
//RGB 转化为BGR
for (int i = 0; i < nWidth * cinfo.num_components; i += cinfo.num_components)
{
unsigned char temp = row_pointer[0][i + 2];
row_pointer[0][i + 2] = row_pointer[0][i]; //RED
row_pointer[0][i] = temp; //BLUE
}
}
怎么我这样读取出来的BRG字节,转换为位图是空白,没有办法显示呀?
但是我在BRG加ALPHA = 0为32位的位图,却又可以正常显示,这是怎么回事呀,有人可以解答下吗?
5 个解决方案
#1
生成的bmp没有4字节补齐?
#2
24位的bmp应该怎么进行4字节补齐呀!
#3
是不是只要被4整除即可!
#4
24位的位图进行4字节补齐代码是这样的:
这样就对齐了
int imageWidth,imageHeight,imageBitCount;
BYTE *pSrcData;//原始未对齐的数据
BYTE *pDestData;//对齐后的数据
...
int nLine,nScanLine;
PBYTE pSrc;
PBYTE pDest;
nLine = imageWidth * imageBitCount / 8;
nScanLine = (nLine %4)?(nLine + 4 - (nLine %4)):nLine;
pDestData = (BYTE*)malloc(nScanLine * imageHeight);
memset(pDest,0,(nScanLine * imageHeight));
pSrc = pSrcData;
pDest = pDestData;
for(int i=0;i<imageHeight;i++)
{
memcpy(pDestData,pSrcData,nLine);
pSrcData += nLine;
pDestData += nScanLine;
}
这样就对齐了
#5
SetPixel
#1
生成的bmp没有4字节补齐?
#2
24位的bmp应该怎么进行4字节补齐呀!
#3
是不是只要被4整除即可!
#4
24位的位图进行4字节补齐代码是这样的:
这样就对齐了
int imageWidth,imageHeight,imageBitCount;
BYTE *pSrcData;//原始未对齐的数据
BYTE *pDestData;//对齐后的数据
...
int nLine,nScanLine;
PBYTE pSrc;
PBYTE pDest;
nLine = imageWidth * imageBitCount / 8;
nScanLine = (nLine %4)?(nLine + 4 - (nLine %4)):nLine;
pDestData = (BYTE*)malloc(nScanLine * imageHeight);
memset(pDest,0,(nScanLine * imageHeight));
pSrc = pSrcData;
pDest = pDestData;
for(int i=0;i<imageHeight;i++)
{
memcpy(pDestData,pSrcData,nLine);
pSrcData += nLine;
pDestData += nScanLine;
}
这样就对齐了
#5
SetPixel