我是乱码 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 WPF使用Canvas绘制矢量图问题
  • ¥15 用三极管设计一个单管共射放大电路
  • ¥20 fluent无法启动
  • ¥15 孟德尔随机化r语言运行问题
  • ¥15 pyinstaller编译的时候出现No module named 'imp'
  • ¥15 nirs_kit中打码怎么看(打码文件是csv格式)
  • ¥15 怎么把多于硬盘空间放到根目录下
  • ¥15 Matlab问题解答有两个问题
  • ¥15 LCD12864中文显示
  • ¥15 在使用CH341SER.EXE时不小心把所有驱动文件删除了怎么解决