如何用C语言程序从bmp格式的图片中读取图片的灰度值

如何用C语言程序从bmp格式的图片中读取图片的灰度值,第1张

1、首先要了解bmp位图的格式,搜索些技术支持文档,bmp位图基本上是分4大部分,文件信息结果部分,文件头信息结果部分,调色板结果部分,后面就是数据实体部分。及其每个部分对应有用的信息。比如长宽。当然长宽信息你自己可以从window系统下看得到。打开bmp文件,把前面三部分的字节总数给固定下来,逐个字符读取,然后读取数据实体部分,输出就可以了。

2、例程:

#include <stdioh>

#include <stdlibh>

#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("5bmp", "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 = fileHeaderbSize;

offset = fileHeaderbOffset;

bmpImageSize = infoHeaderbmpImageSize;

width = infoHeaderbWidth;

height = infoHeaderbHeight;

bitCount = infoHeaderbBitCount;

bytesPerPixel = infoHeaderbBitCount / 8;

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

//输出每个像素点所占字节中的内容

c = fgetc(fp);

while (!feof(fp))

{

printf("%x ", c);

c = fgetc(fp);

}

printf("\n");

fclose(fp);

return 0;

}

C/C++ code

#ifndef CAPTUREBLT

#define CAPTUREBLT 0x40000000

#endif

HBITMAP CaptureScreen(LPRECT lpRect)//lpRect为NULL时表示全屏幕截图

{

HDC hdc, hdcMem ;

HBITMAP hemfCopy ;

HWND h……

以上就是关于如何用C语言程序从bmp格式的图片中读取图片的灰度值全部的内容,包括:如何用C语言程序从bmp格式的图片中读取图片的灰度值、C语言怎么截屏并将数据转换成RGB或YUV420、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9486892.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存