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++ 读取二维数组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

我无法读取2d数组中的图像,以便对其进行一些处理。我使用了上面的代码,但保存的文件给出了错误。 我正在做的是首先读取一个.bmp文件128x128,然后将其保存到另一个.bmp文件中。但当我试图打开输出文件时,会出现错误“文件已损坏或大小过大”

希望有帮助;) 我跳过了错误检查,但您应该将其添加到最终代码中。要写入.bmp图像,请先输入BITMAPFILEHEADER,然后输入BitMapInfo Header,最后输入实际的原始数据

#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);