BMP图像的读写处理

 最近一段时间我学习了计算机图像处理这门课程,通过这门课程的学习,我了解到了图片具有灰度和彩色的区别,并且通过具体的代码可以将一些图片数据进行读写与转化。

第一部分:BMP图像的读写
1.BMP图像的读:
(1)首先定义BMP文件头和信息头变量BITMAPFILEHEADER bf; //BMP文件头结构体BITMAPINFOHEADER bi; //BMP信息头结构体

(2)创建文件输入流 fp
fp=fopen(fileName,”rb”); //fileName为BMP图像文件名

(3)读取信息头、文件头fread(&bf,sizeof(BITMAPFILEHEADER),1,fp); fread(&bi,sizeof(BITMAPINFOHEADER),1,fp);

注:经过这两条程序把BMP图像的信息头、文件头赋给bf和bi变量,可以根据bf和bi得到图像的各种属性。

(4) 读取BMP调色板fread(ipRGB2,sizeof(RGBQUAD),256,fp);

(5)读取BMP位图数据定义一个二维数Imgdata来存取BMP位图数据。
unsigned char * Imgdata;
Imgdata=new unsigned char
[bi.biHeight]; //声明一个指针数组
for ( i=0;i

2.BMP图像的写:
(1)创建一个输出流fp fp=fopen(“mybmp.bmp”,”wb”);

(2) 写BMP图像的信息头、文件头fwrite(&bf2,sizeof(BITMAPFILEHEADER),1,fp); fwrite(&bi2,sizeof(BITMAPINFOHEADER),1,fp);

(3) 写BMP调色板fwrite(ipRGB2,sizeof(RGBQUAD),256,fp);

(4) 写BMP图像的位图数据部分
for (i=(bi.biHeight)-1 ;i>=0;i–)
for (j=0 ;j

注意:将图片信息导入到文件里(导入的图像数据与实际图像数据上下顺序颠倒,最后一行数据应该放在第一行,以此类推)

第二部分:主程序部分,利用上述函数,即可实现BMP图的存储与处理

include “hxlbmpfile.h”

void ImageProcessing(HXLBMPFILE* bmp) {
int i = 0, j = 0;
HXLBMPFILE bf;
bf.iImagew = bmp->iImagew;
bf.iImageh = bmp->iImageh;
bf.iYRGBnum = bmp->iYRGBnum;
if (!bf.IspImageDataOk()) return;
for (i = 0; i < bf.iImageh; i++)
for (j = 0; j < bf.iImagew; j++)
{
bf.pDataAt(i)[j] = 255 – bmp->pDataAt(i)[j];
}
bf.SaveBMPFile(“2.bmp”);
}

int main(int argc, char* argv[]) {
HXLBMPFILE bmpfile;
if(!bmpfile.LoadBMPFile(“C:\Users\lenovo\Downloads\b8color.bmp”))
{printf(“Load BMP file failed.”);return 1;}// do other processing with the imagedata
ImageProcessing(&bmpfile);
printf(“program ends!\n”);
return 0;
}
函数大体可以不发生改变,只需要改变能够决定图片处理色度部分的具体函数就可以进行灰度图片与彩色图片之间的转化。

Original: https://blog.csdn.net/zzjjqq666/article/details/123581511
Author: long may thesunshine
Title: BMP图像的读写处理

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/640921/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球