#include <iostream>
#include <fstream>
#include <vector>
#define HEADERBYTE 54
void reorderDscFile(const std::string& inputFilepath, const std::string& outputFilepath)
{
std::ifstream inputFile(inputFilepath, std::ios::binary); // 打开输入文件
if (!inputFile) {
std::cout << "无法打开输入文件." << std::endl;
return;
}
std::ofstream outputFile(outputFilepath, std::ios::binary); // 打开输出文件
if (!outputFile) {
std::cout << "无法创建输出文件." << std::endl;
return;
}
inputFile.seekg(0, std::ios::end); // 定位到文件末尾
std::streampos fileSize = inputFile.tellg(); // 获取文件大小
inputFile.seekg(0, std::ios::beg); // 定位回文件开头
std::vector<char> buffer(fileSize); // 用于读取输入文件的缓冲区
std::vector<char> new_rgb(fileSize); // 存储重新排序后的结果
if (!inputFile.read(buffer.data(), fileSize)) { // 读取输入文件
std::cout << "读取输入文件失败." << std::endl;
return;
}
for (int i = 0; i < HEADERBYTE; i++) {
new_rgb[i] = buffer[i];
}
for (int i = HEADERBYTE; i < fileSize; i += 6)
{
new_rgb[i + 0] = buffer[i + 2];
new_rgb[i + 1] = buffer[i + 0];
new_rgb[i + 2] = buffer[i + 1];
new_rgb[i + 3] = buffer[i + 2];
new_rgb[i + 4] = buffer[i + 3];
new_rgb[i + 5] = buffer[i + 1];
}
outputFile.write(new_rgb.data(), fileSize); // 将重新排序后的结果写入输出文件
inputFile.close();
outputFile.close();
std::cout << "处理完成." << std::endl;
}
int main() {
std::string inputFilepath = "T0.bmp";
std::string outputFilepath = "output.bmp";
reorderDscFile(inputFilepath, outputFilepath);
return 0;
}
读取bmp图片重新RGB排序后输出
最新推荐文章于 2024-10-17 23:22:01 发布