#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;
}
Я не могу прочитать изображение в массиве 2d, чтобы я мог обработать его. Я использовал код выше, но сохраненный файл дает ошибку. то, что я делаю, вначале читает .bmp-файл 128x128, а затем сохраняет его в другом .bmp-файле. но когда я пытаюсь открыть выходной файл, он дает ошибку «файл поврежден или большой по размеру»читать изображение в 2d массиве C++ и сохранять его
Этого код сделал мой форматтер метать. Я должен был исправить это вручную. Кром, чувак, что ты написал с этим? – user4581301
Не используйте макросы, зачем вам только когда-либо поддерживать 128x128 изображений? Используйте векторы, чтобы вы не просачивали память, и вы можете скопировать свой класс, не нарушая его. Почему члены класса filestreams? Вы используете их только внутри функции, и их не следует динамически распределять. –
Нет файлов для проверки наличия файла 128x128. Содержимое заголовка полностью игнорируется, поэтому вы не знаете, как кодируются данные изображения. – user4581301