c.c文件实现bmp图(c语言文件操作)

这篇博客介绍了如何使用C语言处理BMP图像,主要包含四个文件:main函数实现核心算法,controlBMP.c用于图像处理,imageIO.c负责文件读写,cips.h为头文件。博主展示了代码运行后的图片成果。
摘要由CSDN通过智能技术生成

总共四个文件
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[], 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值