数字图像处理学习笔记(1.0)---位图的读写、几何变换、傅里叶变换、直方图均衡

来源:互联网 发布:weebly建站 编辑:程序博客网 时间:2024/05/22 03:16

位图的读写


#include"bmp.h"#include<iostream>#include<cstring>#include<cstdio>using namespace std;Bitmap::Bitmap(){}Bitmap::~Bitmap(){if (dataBuf!=NULL)delete[] dataBuf;dataBuf = NULL;if (colorTable != NULL)delete[] colorTable;colorTable = NULL;}bool Bitmap::read(char* fileName){FILE* f = fopen(fileName, "rb");if (f == NULL)return false;if (dataBuf != NULL)//释放旧的图像数据内存和颜色表内存delete[] dataBuf;if (colorTable != NULL)delete[] colorTable;dataBuf = NULL;colorTable = NULL;fread(&fileHeader, sizeof(BITMAPFILEHEADER), 1, f);fread(&infoHeader, sizeof(BITMAPINFOHEADER), 1, f);width_p = infoHeader.biWidth;height_p = infoHeader.biHeight;bitCount = infoHeader.biBitCount;if (bitCount == 8){colorTable = new RGBQUAD[256];fread(colorTable, sizeof(RGBQUAD), 256, f);}dataBuf = new unsigned char[infoHeader.biSizeImage];fread(dataBuf, 1, infoHeader.biSizeImage, f);fclose(f);return 1;}bool Bitmap::write(char* fileName){FILE* f = fopen(fileName, "wb");if (f == NULL)return false;int colorTableSize = 0;if (bitCount == 8)colorTableSize = sizeof(RGBQUAD)* 256;int headerSize = sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+colorTableSize;int lineSize = (width_p*bitCount / 8 + 3) / 4 * 4;int dataSize = lineSize*height_p;fileHeader.bfType = 0x4D42;fileHeader.bfSize = headerSize + dataSize;fileHeader.bfReserved1 = 0;fileHeader.bfOffBits = headerSize;infoHeader.biSize = 40;infoHeader.biWidth = width_p;infoHeader.biHeight = height_p;infoHeader.biPlanes = 1;infoHeader.biBitCount = bitCount;infoHeader.biCompression = BI_RGB;infoHeader.biSizeImage = dataSize;infoHeader.biXPelsPerMeter = 0;infoHeader.biYPelsPerMeter = 0;infoHeader.biClrUsed = 0;infoHeader.biClrImportant = 0;fwrite(&fileHeader, sizeof(BITMAPFILEHEADER), 1, f);fwrite(&infoHeader, sizeof(BITMAPINFOHEADER), 1, f);if (bitCount == 8){fwrite(colorTable, sizeof(RGBQUAD), 256, f);}fwrite(dataBuf, 1, dataSize, f);fclose(f);return true;}

测试:

#include"bmp.h"#include<iostream>using namespace std;int main(){char* fileName = "qianxun.bmp";Bitmap* bmp = new Bitmap();bmp->read(fileName);bmp->write("write.bmp");delete bmp;return 1;}




0 0
原创粉丝点击