C/C++教程

c/c++读写png照片

本文主要是介绍c/c++读写png照片,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

seekg()对文件定位,有两个参数:偏移量和基地址。
偏移量:正负数值,正的表示向后偏移,负的表示向前偏移
基地址:表示输入流的位置,3种表示:
ios::beg:开始位置
ios::cur:当前位置
ios::end:结束位置
tellg()函数无参数,返回当前定位指针的位置,也代表着输入流的大小。

#include <fstream> // ifstream, ifstream::in
#include <iostream>
void writePicture(std::string path, char* cContent, int ilength)
{
	FILE* pw;
	pw = std::fopen(path.c_str(), "wb");
	fwrite(cContent, sizeof(char), ilength, pw);
	fflush(pw);
	fclose(pw);
}
void ReadWritePicture(const std::string& szReadPath, const std::string& szWritePath)
{
	// 1. 打开图片
	std::ifstream iPicture(szReadPath, std::ifstream::in | std::ios::binary);
	// 2. 计算图片长度
	iPicture.seekg(0, iPicture.end);    //基地址为结束位置,偏移量为0
	int length = iPicture.tellg();
	iPicture.seekg(0, iPicture.beg);     //基地址为结束位置,偏移量为0
	// 3. 创建内存缓存区
	char* cCache = new char[length];
	// 4. 读取图片到内存中
	iPicture.read(cCache, length);
	iPicture.close();
	writePicture(szWritePath, cCache, length);
	if (nullptr != cCache)
	{
		delete[] cCache;
	}
}
int main() {
	std::string szReadPath = "test.png";
	std::string szWritePath = "image.png";
	ReadWritePicture(szReadPath, szWritePath);
	return 0;
}
#include <fstream> // ifstream, ifstream::in
#include <iostream>

void ReadPicture(const std::string& szReadPath, std::string& szContent, int& ilength)
{
	// 1. 打开图片
	std::ifstream iPicture(szReadPath, std::ifstream::in | std::ios::binary);
	// 2. 计算图片长度
	iPicture.seekg(0, iPicture.end);    //基地址为结束位置,偏移量为0
	ilength = iPicture.tellg();
	iPicture.seekg(0, iPicture.beg);     //基地址为结束位置,偏移量为0
	// 3. 创建内存缓存区
	char* cCache = new char[ilength];
	// 4. 读取图片到内存中
	iPicture.read(cCache, ilength);
	iPicture.close();

	szContent.assign(reinterpret_cast<char*>(&cCache), sizeof(cCache));
	/*if (nullptr != cCache)
	{
		delete[] cCache;
	}*/
}
void writePicture(const std::string& szWritePath, const std::string& szContent, const int& ilength)
{
	FILE* pw;
	pw = std::fopen(szWritePath.c_str(), "wb");
	char* cCache = new char[ilength];
	memcpy(&cCache, szContent.c_str(), sizeof(cCache));
	fwrite(cCache, sizeof(char), ilength, pw);
	fflush(pw);
	fclose(pw);
	if (nullptr != cCache)
	{
		delete[] cCache;
	}
}

int main() {
	std::string szReadPath = "test.png";
	std::string szWritePath = "image.png";
	std::string szContent = "";
	int ilength = 0;
	ReadPicture(szReadPath, szContent, ilength);
	writePicture(szWritePath, szContent, ilength);
	return 0;
}
这篇关于c/c++读写png照片的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!