C++ 读取文件夹图片的方法


#include<io.h>
#include<iostream>
#include<vector>
#include <fstream>

using namespace std;


void get_image_names(std::string file_path, std::vector<std::string>& file_names)
{
	intptr_t hFile = 0;
	_finddata_t fileInfo;
	hFile = _findfirst(file_path.c_str(), &fileInfo);
	if (hFile != -1) {
		do {
			file_names.push_back(fileInfo.name);
			cout << fileInfo.name << endl;
		} 
		while (_findnext(hFile, &fileInfo) == 0);

		_findclose(hFile);
	}
}

void read_img(std::vector<std::string>& file_names)
{
	for (int i = 0; i < file_names.size(); i++)
	{
		ifstream f;   // 读取图像
		f.open("img/"+file_names[i], ios::in | ios::binary);

		f.seekg(0, ios::end);   // 计算长度,将文件指针移动到文件末尾
		int length = f.tellg();   // 返回文件指针的位置
		cout << "图像数据总字节数:" << length << endl;
		f.seekg(0, ios::beg);

		//根据图像数据长度分配内存buffer
		char* ImgBuffer = new char[length];
		f.read((char *)ImgBuffer, length * sizeof(char));
		f.close();

		ofstream out;   // 读取图像
		out.open("img/gg2.jpg", ios::out | ios::binary);
		out.write((const char*)ImgBuffer, length * sizeof(char));  //从buffer中写数据到out指向的文件中

		//关闭文件指针,释放buffer内存
		out.close();
		delete[]ImgBuffer;
	}
}

int main()
{
	std::vector<std::string> file_names;
	get_image_names("./img/*.jpg", file_names);
	read_img(file_names);

	system("pause");
	return 0;
}


//#include <iostream>
//#include <fstream>
//
//using namespace std;
//
//int main(int argc, char* argv[])
//{
//	ifstream f;   // 读取图像
//	f.open("img/test.jpg", ios::in | ios::binary);
//
//	f.seekg(0, ios::end);   // 计算长度,将文件指针移动到文件末尾
//	int length = f.tellg();   // 返回文件指针的位置
//	cout << "图像数据总字节数:" << length << endl;
//	f.seekg(0, ios::beg);
//
//	//根据图像数据长度分配内存buffer
//	char* ImgBuffer = new char[length];
//	f.read((char *)ImgBuffer, length * sizeof(char));
//	f.close();
//
//	ofstream out;   // 读取图像
//	out.open("img/gg.jpg", ios::out | ios::binary);
//	out.write((const char*)ImgBuffer, length * sizeof(char));  //从buffer中写数据到out指向的文件中
//	
//	//关闭文件指针,释放buffer内存
//	out.close();
//	delete[]ImgBuffer;
//	return 0;
//}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值