zoukankan      html  css  js  c++  java
  • 数字图像处理学习笔记(1.0)---位图的读写、几何变换、傅里叶变换、直方图均衡

    位图的读写


    #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;
    }




  • 相关阅读:
    【转载】使用铁哥SmartFlash快速开发方案:66行代码搞定抽奖程序!
    WPF 数据绑定方法分类
    jquerywebsocket
    [转载]as3中单例模式如何设计
    .字符的匹配识别
    paip.提升用户体验搜索功能设计
    paip.提升安全性登录密码出错次数检测
    paip.html 及css调试工具debugbar
    paip.项目开发效率提升之思索
    paip.c#图片裁剪
  • 原文地址:https://www.cnblogs.com/corfox/p/5415025.html
Copyright © 2011-2022 走看看