资源简介

图像处理-读取bmp图像均值滤波-C++

资源截图

代码片段和文件信息

#include   
#include “BmpRot.h“  
#include “stdlib.h“  
#include “math.h“  
#include   

#define PI 3.14159//圆周率宏定义  
#define LENGTH_NAME_BMP 30//bmp图片文件名的最大长度  

using namespace std;

//变量定义  
BITMAPFILEHEADER strHead;
RGBQUAD strPla[256];//256色调色板  
BITMAPINFOHEADER strInfo;

//显示位图文件头信息  
void showBmpHead(BITMAPFILEHEADER pBmpHead) {
cout << “位图文件头:“ << endl;
cout << “文件大小:“ << pBmpHead.bfSize << endl;
cout << “保留字_1:“ << pBmpHead.bfReserved1 << endl;
cout << “保留字_2:“ << pBmpHead.bfReserved2 << endl;
cout << “实际位图数据的偏移字节数:“ << pBmpHead.bfOffBits << endl << endl;
}

void showBmpInforHead(tagBITMAPINFOHEADER pBmpInforHead) {
cout << “位图信息头:“ << endl;
cout << “结构体的长度:“ << pBmpInforHead.biSize << endl;
cout << “位图宽:“ << pBmpInforHead.biWidth << endl;
cout << “位图高:“ << pBmpInforHead.biHeight << endl;
cout << “biPlanes平面数:“ << pBmpInforHead.biPlanes << endl;
cout << “biBitCount采用颜色位数:“ << pBmpInforHead.biBitCount << endl;
cout << “压缩方式:“ << pBmpInforHead.biCompression << endl;
cout << “biSizeImage实际位图数据占用的字节数:“ << pBmpInforHead.biSizeImage << endl;
cout << “X方向分辨率:“ << pBmpInforHead.biXPelsPerMeter << endl;
cout << “Y方向分辨率:“ << pBmpInforHead.biYPelsPerMeter << endl;
cout << “使用的颜色数:“ << pBmpInforHead.biClrUsed << endl;
cout << “重要颜色数:“ << pBmpInforHead.biClrImportant << endl;
}


int main() {
char strFile[LENGTH_NAME_BMP];//bmp文件名  
IMAGEDATA *imagedata = NULL;//动态分配存储原图片的像素信息的二维数组  
//IMAGEDATA *imagedataRot = NULL;//动态分配存储旋转后的图片的像素信息的二维数组  
int width height;//图片的宽度和高度  
cout << “请输入所要读取的文件名:“ << endl;
cin >> strFile;
FILE *fpi *fpw;
fpi = fopen(strFile “rb“);
if (fpi != NULL) {
//先读取文件类型  
WORD bfType;
fread(&bfType 1 sizeof(WORD) fpi);
if (0x4d42 != bfType)
{
cout << “the file is not a bmp file!“ << endl;
return NULL;
}
//读取bmp文件的文件头和信息头  
fread(&strHead 1 sizeof(tagBITMAPFILEHEADER) fpi);
showBmpHead(strHead);//显示文件头  
fread(&strInfo 1 sizeof(tagBITMAPINFOHEADER) fpi);
showBmpInforHead(strInfo);//显示文件信息头  

//读取调色板  
for (unsigned int nCounti = 0; nCounti {
//存储的时候,一般去掉保留字rgbReserved  
fread((char *)&strPla[nCounti].rgbBlue 1 sizeof(BYTE) fpi);
fread((char *)&strPla[nCounti].rgbGreen 1 sizeof(BYTE) fpi);
fread((char *)&strPla[nCounti].rgbRed 1 sizeof(BYTE) fpi);
cout << “strPla[nCounti].rgbBlue“ << strPla[nCounti].rgbBlue << endl;
cout << “strPla[nCounti].rgbGreen“ << strPla[nCounti].rgbGreen << endl;
cout << “strPla[nCounti].rgbRed“ << strPla[nCounti].rgbRed << endl;
}

width = strInfo.biWidth;
height = strInfo.biHeight;
imagedata = (IMAGEDATA*)malloc(width * height * sizeof(IMAGEDATA));
//imagedataRot = (IMAGEDATA*)malloc(2 * width * 2 * height * sizeof(IMAGEDATA));
//初始化原始图片的像素数组  
for (int i = 0; i < height; ++i)
{
for (int j = 0; j < width; ++j)
{
(*(imagedata + i * width + j)).blue

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件       10186  2016-12-04 00:42  back.cpp
     文件        9485  2016-12-19 13:23  BmpRot.cpp
     文件        1283  2016-12-03 19:59  BmpRot.h
     文件      786486  2016-12-03 19:38  lena.bmp

评论

共有 条评论