高手请进!关于用C语言读取24位BMP图的问题
是这样的,我想把一张24位的bmp的像素分别存到3个一维数组R[ ],G[ ],B[ ]里,但是输出某一行的R,G,B后发现有错位,后来百度了一下,原因是BMP存放时遵循了对齐原则,因为长度不是4的倍数所以进行了比特填充,而我没有注意到这个问题,错把一些填充位也读到了RGB数组里,导致了错位。搞了一天都不知道怎么跳过填充位,求高手帮忙解答。
现在已经得到了该位图数据的宽度和高度:bmpWidth与bmpHeight
这个是小弟的代码,求帮忙
void separate(unsigned char* imgBuf, int* R,int* G,int* B,int lineByte) //imgBuf是读取图像数据的指针, lineByte是每行像素所占字节数
{
int i, j;
//int k = 0;
for (i = 0; i < bmpHeight; i++)
{
for (j = 0; j < bmpWidth; j++)
{
R[i*bmpWidth + j] = *(imgBuf + i*lineByte + j * 3 + 2);
G[i*bmpWidth + j] = *(imgBuf + i*lineByte + j * 3 + 1);
B[i*bmpWidth + j] = *(imgBuf + i*lineByte + j * 3 + 0);
//k++;
}
}
//printf("\nthe value of k is %d\n", k);
}
现在已经得到了该位图数据的宽度和高度:bmpWidth与bmpHeight
这个是小弟的代码,求帮忙
void separate(unsigned char* imgBuf, int* R,int* G,int* B,int lineByte) //imgBuf是读取图像数据的指针, lineByte是每行像素所占字节数
{
int i, j;
//int k = 0;
for (i = 0; i < bmpHeight; i++)
{
for (j = 0; j < bmpWidth; j++)
{
R[i*bmpWidth + j] = *(imgBuf + i*lineByte + j * 3 + 2);
G[i*bmpWidth + j] = *(imgBuf + i*lineByte + j * 3 + 1);
B[i*bmpWidth + j] = *(imgBuf + i*lineByte + j * 3 + 0);
//k++;
}
}
//printf("\nthe value of k is %d\n", k);
}
...全文
相关推荐
C语言读取、存储、显示BMP图像
在C语言下,可读取、存储、显示BMP图像,对BMP图像格式进行了详细剖析。
BMP文件格式详解及利用C读取24位真彩色图片信息
BMP文件格式详解 你必须要懂得几点 BMP(Bitmap、位图) 位数:1、4、8、16、24(RGB真彩色)、32(RGBA[透明度]真彩色),指的是表示一个像素所用的bit位数。 在BMP文件中,如果一个数据需要用几个字节来表示的话,那么该数据的存放字节顺序为“低地址存放低位数据,高地址存放高位数据”。如数据0x1756在内存中从小到大存储为: 0x77 0x78 0x5...
c语言读取bmp图像c语言读取bmp图像
c语言读取bmp图像c语言读取bmp图像c语言读取bmp图像c语言读取bmp图像c语言读取bmp图像c语言读取bmp图像c语言读取bmp图像c语言读取bmp图像c语言读取bmp图像
图片转换工具(jpg转8位bmp,24位bmp转8位bmp)
可以实现jpg图片到256色bmp图片的转换,24位bmp图片到256色bmp图片的转换,含源代码,重新编译后即可
24位以下BMP图的读取、复制
NULL 博文链接:https://feng88724.iteye.com/blog/316954


其它技术问题
