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<bi.biHeight;i++)
Imgdata[i]=new unsigned char[(bi.biWidth3+3)/44]; //每个数组元素也是一个指针数组
for ( i=0;i<bi.biHeight;i++ )
for(j=0;j<(bi.biWidth3+3)/44;j++)
fread(&Imgdata[i][j],1,1,fp);//每次只读取一个字节,存入数组

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<(bi.biWidth3+3)/44;j++)
fwrite(&Imgdata[i][j],1,1,fp);

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

第二部分:主程序部分,利用上述函数,即可实现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;
}
函数大体可以不发生改变,只需要改变能够决定图片处理色度部分的具体函数就可以进行灰度图片与彩色图片之间的转化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>