我是乱码 2016-02-28 10:49 采纳率: 0%
浏览 1855

C语言提取BMP图片遇到的问题

有几个问题想请教一下大家。
1:比如100 * 100像素的图片,它对角线应该有200个像素,还是141个像素?
2:100 * 100像素的BMP提取出来的像素点 有30000个还是40000个?我用以下代码提取的是40000个,分别是R,G,B和那个保留吗?还是其他什么?
3:我想实现的是:8位BMP的对角线像素点提取到文本文档,做着做着有点蒙圈了

#include
#include

#pragma pack(2)

/*定义WORD为两个字节的类型*/
typedef unsigned short WORD;
/*定义DWORD为e四个字节的类型*/
typedef unsigned long DWORD;

/*位图文件头*/
typedef struct BMP_FILE_HEADER
{
WORD bType; /* 文件标识符 /
DWORD bSize; /
文件的大小 /
WORD bReserved1; /
保留值,必须设置为0 /
WORD bReserved2; /
保留值,必须设置为0 /
DWORD bOffset; /
文件头的最后到图像数据位开始的偏移量 */
} BMPFILEHEADER;

/*位图信息头*/
typedef struct BMP_INFO
{
DWORD bInfoSize; /* 信息头的大小 /
DWORD bWidth; /
图像的宽度 /
DWORD bHeight; /
图像的高度 /
WORD bPlanes; /
图像的位面数 /
WORD bBitCount; /
每个像素的位数 /
DWORD bCompression; /
压缩类型 /
DWORD bmpImageSize; /
图像的大小,以字节为单位 /
DWORD bXPelsPerMeter; /
水平分辨率 /
DWORD bYPelsPerMeter; /
垂直分辨率 /
DWORD bClrUsed; /
使用的色彩数 /
DWORD bClrImportant; /
重要的颜色数 */
} BMPINF;

/*彩色表*/
typedef struct RGB_QUAD
{
WORD rgbBlue; /* 蓝色强度 /
WORD rgbGreen; /
绿色强度 /
WORD rgbRed; /
红色强度 /
//WORD rgbReversed; /
保留值 */
} RGBQUAD;

int main()
{
FILE *fp;
BMPFILEHEADER fileHeader;
BMPINF infoHeader;
long offset, bmpImageSize, width, height, bytesPerPixel, size, bitCount;
// int i, j;
// unsigned char **p;
WORD c;

if ((fp = fopen("d://a1.bmp", "rb")) == NULL)
{
    printf("Cann't open the file!\n");
    exit(0);
}

fseek(fp, 0, 0);
fread(&fileHeader, sizeof(fileHeader), 1, fp);
fread(&infoHeader, sizeof(infoHeader), 1, fp);

//计算并输出位图数据的偏移量,图像的大小,宽度和高度,每个像素点所占的字节
size = fileHeader.bSize;
offset = fileHeader.bOffset;
bmpImageSize = infoHeader.bmpImageSize;
width = infoHeader.bWidth;
height = infoHeader.bHeight;
bitCount = infoHeader.bBitCount;
bytesPerPixel = infoHeader.bBitCount / 8;

printf("%d %d %d %d %d %d\n", size, offset, bmpImageSize, width, height, bitCount, bytesPerPixel);

//输出每个像素点所占字节中的内容
c = fgetc(fp);
int sum = 1;

while (!feof(fp))
{

    printf("%d ", c);
    c = fgetc(fp);
    sum++;
}

printf("%d\n",sum-1);

fclose(fp);

return 0;

}

  • 写回答

3条回答

  • 我是乱码 2016-02-28 11:00
    关注

    我这段代码 用100 * 100像素点的图, 出来40000个数据,都是0~255的, 顺序是BMP图片最左最下的像素点的 argb 然后左2最下的argb是吧? argb中的a是透明度吧?,那么我想计算这个最左下的像素点的灰度值该如何计算?是指用rgb忽略a吗?

    评论

报告相同问题?

悬赏问题

  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记