C++ 读取二维数组C+中的图像+;并保存它 #包括 #包括//用于文件I/O #定义宽度128 #定义高度128 #包括 使用名称空间std; typedef无符号字符unchar; 类图像 { ///////////////////////////////////////////////////////////////////////////////////////阅读 公众: void readimage() { imageData=newunchar*[HEIGHT];//创建新数组大小:图像的高度。 对于(int i=0;iopen(“L.bmp”,ios::in | ios::binary);//打开文件名并读取为二进制文件。 pInFile->read(reinterpret_cast(imageHeaderData),1078);//将bmp头数据读入数组。 对于(int i=0;iread(reinterpret_cast(imageData[i]),WIDTH);//将行读取到每个数组条目中。 } pInFile->close();//关闭流。 } 公众: 无效写入() { //平滑滤波器(); pOutFile=新的流; pOutFile->open(“output.bmp”,ios::out | ios::binary); pOutFile->write(重新解释投射(imageHeaderData),1078);//将头数据写入输出 对于(int i=0;iwrite(重新解释投射(imageData[i]),宽度);//写入新的图像数据。 } pOutFile->close();//关闭流 } 公众: ifstream*pInFile; 流*倾倒文件; 取消选中imageHeaderData[1078];//.bmp头数据,偏移量为1078。取消选中**imageData; }; int main() { 模拟abc; abc.readimage(); abc.write(); 返回0; }
我无法读取2d数组中的图像,以便对其进行一些处理。我使用了上面的代码,但保存的文件给出了错误。 我正在做的是首先读取一个.bmp文件128x128,然后将其保存到另一个.bmp文件中。但当我试图打开输出文件时,会出现错误“文件已损坏或大小过大”希望有帮助;) 我跳过了错误检查,但您应该将其添加到最终代码中。要写入.bmp图像,请先输入BITMAPFILEHEADER,然后输入BitMapInfo Header,最后输入实际的原始数据C++ 读取二维数组C+中的图像+;并保存它 #包括 #包括//用于文件I/O #定义宽度128 #定义高度128 #包括 使用名称空间std; typedef无符号字符unchar; 类图像 { ///////////////////////////////////////////////////////////////////////////////////////阅读 公众: void readimage() { imageData=newunchar*[HEIGHT];//创建新数组大小:图像的高度。 对于(int i=0;iopen(“L.bmp”,ios::in | ios::binary);//打开文件名并读取为二进制文件。 pInFile->read(reinterpret_cast(imageHeaderData),1078);//将bmp头数据读入数组。 对于(int i=0;iread(reinterpret_cast(imageData[i]),WIDTH);//将行读取到每个数组条目中。 } pInFile->close();//关闭流。 } 公众: 无效写入() { //平滑滤波器(); pOutFile=新的流; pOutFile->open(“output.bmp”,ios::out | ios::binary); pOutFile->write(重新解释投射(imageHeaderData),1078);//将头数据写入输出 对于(int i=0;iwrite(重新解释投射(imageData[i]),宽度);//写入新的图像数据。 } pOutFile->close();//关闭流 } 公众: ifstream*pInFile; 流*倾倒文件; 取消选中imageHeaderData[1078];//.bmp头数据,偏移量为1078。取消选中**imageData; }; int main() { 模拟abc; abc.readimage(); abc.write(); 返回0; },c++,image,C++,Image,我无法读取2d数组中的图像,以便对其进行一些处理。我使用了上面的代码,但保存的文件给出了错误。 我正在做的是首先读取一个.bmp文件128x128,然后将其保存到另一个.bmp文件中。但当我试图打开输出文件时,会出现错误“文件已损坏或大小过大”希望有帮助;) 我跳过了错误检查,但您应该将其添加到最终代码中。要写入.bmp图像,请先输入BITMAPFILEHEADER,然后输入BitMapInfo Header,最后输入实际的原始数据 #include <iostream> #incl
#include <iostream>
#include <fstream> // for file I/O
#define WIDTH 128
#define HEIGHT 128
#include <cmath>
using namespace std;
typedef unsigned char unchar;
class MImage
{
///////////////////////////////////////////////////////////////////////////////////////read
public:
void readimage()
{
imageData = new unchar*[HEIGHT]; // create new array size: height of image.
for (int i = 0; i < HEIGHT; i++)
{
imageData[i] = new unchar[WIDTH]; //create matrix.
}
//image I/O
pInFile = new ifstream;
pInFile->open("L.bmp", ios::in | ios::binary); // open fileName and read as binary.
pInFile->read(reinterpret_cast<char*>(imageHeaderData), 1078); //read bmp header data into array.
for (int i = 0; i < HEIGHT; i++)
{
pInFile->read(reinterpret_cast<char*>(imageData[i]), WIDTH); //read row into each array entry.
}
pInFile->close(); //close stream.
}
public:
void write()
{
//smoothFilter();
pOutFile = new ofstream;
pOutFile->open("output.bmp", ios::out | ios::binary);
pOutFile->write(reinterpret_cast<char*>(imageHeaderData), 1078); //write header data onto output
for (int i = 0; i < HEIGHT; i++)
{
pOutFile->write(reinterpret_cast<char*>(imageData[i]), WIDTH); // write new image data.
}
pOutFile->close(); //close stream
}
public:
ifstream* pInFile;
ofstream* pOutFile;
unchar imageHeaderData[1078]; //.bmp header data with offset 1078. unchar** imageData;
};
int main()
{
MImage abc;
abc.readimage();
abc.write();
return 0;
}
不要忘记删除
位图图像
或使用std::vector
,这段代码使我的格式化程序崩溃。我不得不用手把它修好。克罗姆,伙计,你用什么写的?不要使用宏,为什么你只想支持128x128图像?使用向量,这样就不会泄漏内存,并且可以复制类而不会中断。为什么filestreams类是成员?您只在函数内部使用它们,不应动态分配它们。没有检查以确保文件为128x128。标题内容完全被忽略,因此您不知道图像数据是如何编码的。
FILE* filePtr;
int error;
unsigned int count;
BITMAPFILEHEADER bitmapFileHeader;
BITMAPINFOHEADER bitmapInfoHeader;
int imageSize;
unsigned char* bitmapImage;
// Open the height map file in binary.
error = fopen_s(&filePtr, filename, "rb");
// Read in the file header.
count = fread(&bitmapFileHeader, sizeof(BITMAPFILEHEADER), 1, filePtr);
// Read in the bitmap info header.
count = fread(&bitmapInfoHeader, sizeof(BITMAPINFOHEADER), 1, filePtr);
// Save the dimensions of the terrain.
Width= bitmapInfoHeader.biWidth;
Height= bitmapInfoHeader.biHeight;
// Calculate the size of the bitmap image data.
imageSize = Width* Height* 3;
// Allocate memory for the bitmap image data.
bitmapImage = new unsigned char[imageSize];
// Move to the beginning of the bitmap data.
fseek(filePtr, bitmapFileHeader.bfOffBits, SEEK_SET);
// Read in the bitmap image data.
count = fread(bitmapImage, 1, imageSize, filePtr);
// Close the file.
error = fclose(filePtr);