简单记忆,c语言读写,读取bmp文件

利用C语言,进行文件读写

读文件,写文件 

#include <stdio.h>
#include <stdlib.h>
//将array_read指向的data_length个元素存储到path对应的路径中
int read_raw_hex_data(char path[], int data_length, double array_read[]) {
	FILE* fpRead = NULL;
	int i = 0;
	fopen_s(&fpRead, path, "r");
	if (fpRead == NULL)
	{
		printf("Fail to read raw data file!");
		return -1;
	}

	for (i = 0; i < data_length; i++)
	{
		fscanf_s(fpRead, "%lf", &array_read[i]);
	}
	fclose(fpRead);

	return 0;
}

//将array_read指向的data_length个元素存储到path对应的路径中
int  save_data(char path[], int data_length, double array_write[]) {
	FILE* fpWrite = NULL;
	int i = 0;
	fopen_s(&fpWrite, path, "w");
	if (fpWrite == NULL)
	{
		printf("Failed to save data!");
		exit(1);
	}
	for (i = 0; i < data_length; i++) {
		
		fprintf(fpWrite, "%.20lf ", array_write[i]);
		if ((i + 1) % 5 == 0)fprintf(fpWrite, "\n");
	}
		
	fclose(fpWrite);
	return 0;
}

int main() {
	double a[20];
	int data_length = 20;
	char path[40] = "./data_file/1.txt";
	for (int i = 0; i < 20; i++)
		a[i] = i*2.5+1e-18;
	save_data(path, data_length, a);
	read_raw_hex_data(path, data_length, a);
	for (int i = 0; i < 20; i++) {
		printf("%.20lf ",a[i]);
		if ((i + 1) % 5 == 0)printf("\n");
	}
		
	return 0;
}

BMP图片格式简单梳理

经查阅资料,选择BPM(bitmap)格式,C语言可以直接打开,头文件在#include<stdio.h>

链接C语言实现BMP图像处理(直方图均衡化) - 百度文库

Q3怎么提取像素值,获得所需实验图片数据

 

C语言实现对BMP文件的单通道图像以及灰度图提取 - 王敬斯 - 博客园

 

 

 

此链接而文档的数据是我初始编写读取bmp文件代码的主要参考链接,以至于误导我在完成加密后获得的灰度图像后,读取灰度图像时仍然采用fseek(fp, sizeof(RGBQUAD), 1);语句而没有及时改为fread(pColorTable11, sizeof(RGBQUAD), 256, fp);,我曾进行多次排查错误,找了好几天,最后终于发现是这里出现问题,再次检查加密算法,尝试对每一个像素点进行简单的处理,如都与1异或(结果图片加密解密后变化不大),我又试图每个像素点依次对1,2,3,…,255,1,2,3,…,255,1循环,发现图像加密后有变化了,但是解密无法复原,多次进行发现仍然是这个结果,图片的含义就是对应英文意思,上图是我已经找到出错点,那就是没有后的运行结果图,成也萧何,败也萧何,我打印输出中间的运行结果,发现确实对不上,如上图。
最后,怎么想到解决这个问题的,没办法了,去再找资料,看视频,可是视频里也没说要怎么读灰度图像,只是偶然在一个视频里看到这个

 

于是,我想,可能这里有问题,调色板不是必须的吗,至少对于灰度图像,那我在写的时候就不写这个调色板,我看看我的数据是否出现错误,这下不出现错误了,如下图

 

不过,由于没有调色板,在windows下看不到我加密后的图片了,应该是格式无法解析。。。
我再次看视频,找链接,找错误,这次我认准了,哪里都没有出错,就是读文件读得不对,下面的链接再次进入我的视野https://blog.csdn.net/weixin_32469089/article/details/117142339?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165734166716781435411776%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=165734166716781435411776&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~pc_rank_34-3-117142339-null-null.142^v32^pc_rank_34,185^v2^control&utm_term=c%E8%AF%AD%E8%A8%80bmp%E5%A4%84%E7%90%86&spm=1018.2226.3001.4187 

 

起初找图片资料的时候,我也找了这个网站,由于只有代码,没有图片,我没有用,也没有细看,这次我看到读取的不正是我要的灰度图像吗,我马上看了看前面的代码,找到那句话,应用到我的代码里,成功了,问题解决。

记住:8bit灰度图片需要调色板,存储的时候和读取的时候都要。

Q4对于问题三中的图像素材,由于网站里大部分都有水印,在下面的网址里找到了素材original image: Lena

 

打开图片,另存为设置为bmp文件即可

起初,我是先用彩色图片转化为灰度图片,对于得到的灰色图片,进行加密解密处理,实际可以直接对灰色图片加密解密处理

Q6BMP基本知识https://blog.csdn.net/imxlw00/article/details/124926918?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165734166716781435411776%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=165734166716781435411776&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~pc_rank_34-10-124926918-null-null.142^v32^pc_rank_34,185^v2^control&utm_term=c%E8%AF%AD%E8%A8%80bmp%E5%A4%84%E7%90%86&spm=1018.2226.3001.4187

 

结构体对齐规则

 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值