2014-08-31 4 views
0

Предположим, мне дали изображение под названием 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 

Благодаря

ответ

1

Просто используйте:

int main() 
{ 
    // Construct a PNG object by passing the name 
    // of the png file to the constructor. 
    PNG a("in.png"); 
    return 0; 
} 
+0

так, если я хочу написать, что изображение в файл, который делает противоположное данной функции, wuld я a.write_out ("выход .png ") .... будет ли это работать? – user124627

+0

@ user124627, если класс 'PNG' имеет такую ​​функцию, то да, он должен. –

+0

thankyou очень много, у него есть эта функция – user124627

Смежные вопросы