61 lines
2.1 KiB
C++
61 lines
2.1 KiB
C++
#ifndef IMAGE_H
|
||
#define IMAGE_H
|
||
#include "struct.h"
|
||
|
||
class Image
|
||
{
|
||
public:
|
||
//构造函数及其重载
|
||
Image(){}//创建行列都为零的Image对象
|
||
Image(int h, int w);//创建h行,w列的Image对象
|
||
Image(int h, int w, unsigned char val); //创建的图像像素值都为val;
|
||
Image(const char* ImageName); //利用文件名从硬盘加载图像文件成为Image对象;
|
||
Image(unsigned char *m, int rows, int cols); //从一维静态数组创建Image对象,图像的行数和列数由后面两个参数给出;
|
||
Image(unsigned char m[][100], int rows); //从静态二维数组创建Image对象,图像的行数(二维数组的第一个维度)由第二个参数rows给出;
|
||
Image(unsigned char **m, int h, int w); //从动态数组(二级指针)创建Image对象,图像的行数和列数由后面两个参数给出;
|
||
Image(Image &im); //拷贝构造函数;
|
||
~Image(); //析构函数;
|
||
|
||
|
||
void ReadBMP(const char* filename); //从BMP文件中读入图像数据;
|
||
void WriteBMP(const char* filename); //将图像数据保存为BMP图像文件;
|
||
void WriteBMP(const char *filename, unsigned char** data);//翻转时写图片
|
||
void WriteBMP(const char *filename, unsigned char** data,//放缩时写图片
|
||
BMPFILEHEADER bmpfileheader, BITMAPINFOHEADER bitmapinfoheader);
|
||
|
||
|
||
void ReadText(const char* filename); //从文本文件中读入图像数据;
|
||
void WriteText(const char* filename); //将图像数据保存为文本文件;
|
||
|
||
|
||
unsigned char& At(int row, int col); //获取第row行第col列的像素点的值;
|
||
void Set(int row, int col, unsigned char value); //设置像素(row,col)为某值;
|
||
void Set(unsigned char value); //设置图像所有像素为同一值;
|
||
|
||
|
||
void Flip(int code); //图像的翻转; 根据code的值:0:左右翻转,1:上下翻转;
|
||
void Resize(int code); //图像的缩放;根据code的值:0:缩小一倍,1:放大一倍;
|
||
|
||
|
||
void Cut(int x1, int y1, int x2, int y2);//裁剪点(x1,y1)到点(x2,y2)的图像
|
||
|
||
|
||
void Rotate(int degree);//图像旋转的函数(简单起见,旋转角度为90度的整数倍)
|
||
|
||
|
||
void Mean_Variance(float &m, float &var);//求图像的均值和方差,利用参数输出
|
||
|
||
friend void Swap(Image &a, Image &b);//使用友元函数交换两个Image对象的数据
|
||
void myFree(unsigned char** data, int h);
|
||
Image& operator=(Image& val);//重载操作符
|
||
|
||
private:
|
||
unsigned char **data;
|
||
int height;
|
||
int width;
|
||
BMPFILEHEADER bmpfileheader;
|
||
BITMAPINFOHEADER bitmapinfoheader;
|
||
};
|
||
|
||
#endif
|