Предположим, мне дали изображение под названием in.png
в том же каталоге, что и у моего main.cpp
. Я должен прочитать этот образ и поместить его в b
, который я создал в теле main
. Мне дали class PNG
и функцию для чтения изображения. Я также разместил свой алгоритм ниже, я последний раз занимался C языком программирования 3 года назад, теперь на C++, и я много забыл. Почему мой алгоритм не работает, что не такЧтение изображения из того же каталога?
В png.h;
class PNG
{
public:
PNG(string const & file_name);
/**
* Copy constructor: creates a new PNG image that is a copy of
* another.
* @param other PNG to be copied.
*/
};
в png.cpp, у нас есть;
PNG::PNG(string const & file_name)
{
_pixels = NULL;
_read_file(file_name);
}
В main.cpp это мой код;
int main
{
PNG a;
PNG*b = NULL;
b = a.PNG(string const & in.png);
if(*b = NULL)
cout << "The image wasn't read" << endl;
return 0;
}
благодаря
EDIT ------------------------------------- -----------------
Здравствуйте, Mr. R Sahu, Итак, я хочу, чтобы иметь возможность поворачивать это изображение. Итак, я создал еще один объект под названием «b», я надеялся, что я получу повернутые данные из «a» и поставлю его в «b». Я решил использовать функцию, объявленную в PNG, но объявлен как «класс» пикселя, так же как PNG - это класс изображения. Но я использую ошибки, что не так с моим кодом. Коды с «//» - это вещи, которые я пробовал раньше и не работали.
Код содержит несколько файлов;
в PNG.h теперь мы имеем функцию, определенную как;
#include <iostream>
#include "rgbapixel.h"
class PNG
{
public:
RGBAPixel * operator()(size_t x, size_t y);
/**
* Const pixel access operator. Const version of the previous
* operator(). Does not allow the image to be changed via the
* pointer.
* @param x X-coordinate for the pixel pointer to be grabbed from.
* @param y Y-cooridnate for the pixel pointer to be grabbed from.
* @return A pointer to the pixel at the given coordinates (can't
* change the pixel through this pointer).
*/
size_t width() const; // returns width
size_t width() const;
private:
// storage
size_t _width;
size_t _height;
RGBAPixel * _pixels;
};
Функции были выполнены для нас в png.cpp. Итак, в main.cpp у меня есть код для их использования;
#include <algorithm>
#include <iostream>
#include "rgbapixel.h"
#include "png.h"
using namespace std;
int main()
{
cout << "me..........." << endl;
PNG a("in.png");
PNG b;
for(size_t i = 0; i < a.width(); i++)
{
for(size_t j = 0; j <a.height(); j++)
{
// *b(i, j) = *a(j, i); erata
// b(i,j) = RGBAPixel * operator()(size_t x, size_t y);
// b(i, j) = operator()(i, j);
//b(i,j) = *operator(i,j);
//b(j,i) = a*operator(i,j);
//b(j,i) = a.operator(i,j);
//b(j, i) = a.*operator(i,j);
}
}
b.writeToFile("output.png");
return 0;
}
Я получаю ошибки с использованием функции, я не могу сказать, что не так. Итак, я не знаю, будет ли мой алогарифм получить изображение повернутым
некоторые ошибки;
[[email protected] lab_intro]$ make
clang++ -std=c++1y -stdlib=libc++ -c -g -O0 -Wall -Wextra -pedantic main.cpp
main.cpp:24:29: error: expected ')'
b(i,j) = *operator(i,j);
^
main.cpp:24:28: note: to match this '('
b(i,j) = *operator(i,j);
^
main.cpp:24:20: error: use of undeclared 'operator()'
b(i,j) = *operator(i,j);
^
2 errors generated.
make: *** [main.o] Error 1
Благодаря
так, если я хочу написать, что изображение в файл, который делает противоположное данной функции, wuld я a.write_out ("выход .png ") .... будет ли это работать? – user124627
@ user124627, если класс 'PNG' имеет такую функцию, то да, он должен. –
thankyou очень много, у него есть эта функция – user124627