总共四个文件
main函数 里面为主要算法;
controlBMP.c 里面为处理图像算法;
imagle.c 内为文件读取和写入函数;
cips.h 为顶层头文件
运行结果在最下方
main函数
#include "cips.h"
int main()
{
int imageData[WIDTH][HEIGHT];
FILE *fp; // FILE类型,在stdio.h头文件中,FILE类是一个结构体,代表任何一个任何类型的文件,用于文件的读写操作。
int i, j;
unsigned char FileHeader[14];//文件头
unsigned char InfoHeader[40]; //信息头
unsigned char rgbQuad[CLRUSED*4];//tiaose调色板
unsigned char imArrays[HEIGHT][WIDTH]; // 数据
char fileName_IN[] = "lena_in.bmp";//原图
char image_blackfile[] = "lena_innone_image_black";//四角涂黑
char image_shiftfile[]= "lena_innone—image_shift";//平移
char image_scalefile[]= "lena_innone—image_scale";//2*2缩小
char image_rotationfile90[]= "lena_innone—image_rotation90";//90度旋转
char image_rotationfile180[]="lena_innone—image_rotation180";//180旋转
char image_fenshenfile[]= "lena_innone—image_fenshen";//重影图
char image_erjihuafile[]= "lena_innone—image_erjihua";//二极化图
char image_fansefile[] = "lena_innone—image_fanse";//反射图
char image_masaikefile[]= "lena_innone—image_masaike";//马赛克1
char image_masaikefile2[]="lena_innone—image_masaike2.0";//马赛克2
//以上均为文件数组和文件名,作为后面函数的形参,进而对图像进行处理
unsigned char temp;
int dataOffset; //从文件头到实际位图数据的偏移字节数=位图文件头长度+位图信息头长度+调色板长度
read_bmpHeader(fileName_IN, FileHeader, InfoHeader, rgbQuad);
//此函数将原图的文件头信息头调色板等数据保存在三个数组中
dataOffset = 14 + 40 + CLRUSED*4;//读图像数据
if ((fp = fopen(fileName_IN, "rb")) == NULL)//打开文件
{
printf("Failure to open file! \n");
exit(0);
}
fseek(fp, dataOffset, SEEK_SET); //跳过图像文件头部分,开始读图像数据
for (i = 0; i < HEIGHT; i++)//打开原图文件进行图片数据采集,共256*256
{
for (j = 0; j < WIDTH; j++)
{
fread(&temp, 1, 1, fp);
imArrays[i][j] = temp;
}
}
image_black(image_blackfile,FileHeader, InfoHeader,rgbQuad, imArrays);//涂黑
image_shift(image_shiftfile,FileHeader, InfoHeader,rgbQuad, imArrays);//平移
image_scale(image_scalefile,FileHeader, InfoHeader,rgbQuad, imArrays);//缩小
image_rotation90(image_rotationfile90,FileHeader, InfoHeader,rgbQuad, imArrays);//翻转
image_rotation180(image_rotationfile180,FileHeader, InfoHeader,rgbQuad, imArrays);//翻转180
fenshen(image_fenshenfile,FileHeader, InfoHeader,rgbQuad, imArrays);//分身重影
erjihua(image_erjihuafile,FileHeader, InfoHeader,rgbQuad, imArrays);//二极化操作
fanse(image_fansefile,FileHeader, InfoHeader,rgbQuad, imArrays);//反射操作
masaike(image_masaikefile,FileHeader, InfoHeader,rgbQuad, imArrays);//马赛克2*2
masaike2(image_masaikefile2,FileHeader, InfoHeader,rgbQuad, imArrays);//马赛克4*4
fclose(fp);
cips.h
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <io.h>
#include <fcntl.h>
#include <dos.h>
#include <math.h>
#include <malloc.h>
#include <string.h>
#include <sys\types.h>
#include <sys\stat.h>
#define WIDTH 256 //图像宽度
#define HEIGHT 256 //图像高度
#define CLRUSED 256 // 调色板颜色数:256色,针对8位灰度图
void read_bmpHeader(char *filename, unsigned char bmFileHeader[], unsigned char bmInfoHeader[], unsigned char bmClrMap[]);
void image_black(char *filename, unsigned char bmFileHeader[], unsigned char bmInfoHeader[], unsigned char bmClrMap[], unsigned char imageData[WIDTH][HEIGHT]);
void image_shift(char *filename, unsigned char bmFileHeader[], unsigned char bmInfoHeader[], unsigned char bmClrMap[], unsigned char imageData[WIDTH][HEIGHT]);
void image_scale(char *filename, unsigned char bmFileHeader[], unsigned char bmInfoHeader[],