你如何旋转给定的图像?

时间:2014-08-31 23:44:04

标签: c++ image function class header-files

假设图像是i对象文件" a",我创建了另一个名为b的目标文件来旋转图像。我给了(j,i)a到(i,j)的b,但是我的代码没有工作,因为我没有正确使用那个叫做operator的函数,我有" //"我尝试过的东西,但我一直都有错误,我该怎么办? rgbapixels是一个像素类,就像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("I have put the image in "a" here");
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);
}
}
return 0;
}

我在使用该功能时遇到错误,我无法说出错误。所以,我不知道我的算法是否会使图像旋转

一些错误;

[jonathan2@linux-a1 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

由于

2 个答案:

答案 0 :(得分:0)

你不应该以这种方式调用操作符函数,而是这样做:

*b(i, j) = *a(j, i);

答案 1 :(得分:0)

当具有此运算符的类的实例作为函数调用被调用时,将使用()运算符。

因此,对于您的PNG类,以及名为ab的两个实例,他们的()运算符将被简单地调用为:

a(i, j)

b(i, j)

由于你的()运算符返回RGBAPixel *,这种伪函数调用的最终结果是一个指针,我认为应该取消引用它。

示例中第一行注释掉的代码:

// *b(i, j) = *a(j, i);

这让我觉得您()运算符的正确用法。我没有看到编译它的任何问题。