65,208
社区成员
发帖
与我相关
我的任务
分享
/* use imRef to access image data. */
#define imRef(im, x, y) (((uchar *)(im->data+y*im->w))[x])
static image<rgb> *imageGRAYtoRGB(image<uchar> *input)
{
int width = input->width();
int height = input->height();
image<rgb> *output = new image<rgb>(width, height, false);
for (int y = 0; y < height; y++)
{
for (int x = 0; x < width; x++)
{
imRef(output, x, y).r = imRef(input, x, y);//这里报错
//imRef(output, x, y).g = imRef(input, x, y);
//imRef(output, x, y).b = imRef(input, x, y);
}
}
报错:
error C2228: “.r”的左边必须有类/结构/联合
for (int y = 0; y < height; y++)
{
for (int x = 0; x < width; x++)
{
((rgb *)imPtr(output, x, y))->r = imRef(input, x, y);
((rgb *)imPtr(output, x, y))->g = imRef(input, x, y);
((rgb *)imPtr(output, x, y))->b = imRef(input, x, y);
}
}
typedef unsigned char uchar;
typedef unsigned char uchar;
typedef struct
{
uchar r, g, b;
} rgb;
求指导!!!

template <class T>
class image
{
public:
/* create an image */
image(const int width, const int height, const bool init = true);
/* delete an image */
~image();
/* init an image */
void init(const T &val);
/* copy an image */
image<T> *copy() const;
// /* get the width of an image. */
int width() const { return w; }
// /* get the height of an image. */
int height() const { return h; }
//
/* image data. */
T *data;
//
// /* row pointers. */
T **access;
//
public:
int w, h;
};
/* use imRef to access image data. */
#define imRef(im, x, y) (((uchar *)(im->data+y*im->w))[x])
/* use imPtr to get pointer to image data. */
#define imPtr(im, x, y) &(((uchar *)(im->data+y*im->w))[x])
template <class T>
image<T>::image(const int width, const int height, const bool init)
{
w = width;
h = height;
data = new T[w * h]; // allocate space for image data
access = new T*[h]; // allocate space for row pointers
// initialize row pointers
for (int i = 0; i < h; i++)
access[i] = data + (i * w);
if (init)
memset(data, 0, w * h * sizeof(T));
}
template <class T>
image<T>::~image()
{
delete [] data;
delete [] access;
}
template <class T>
void image<T>::init(const T &val)
{
T *ptr = imPtr(this, 0, 0);
T *end = imPtr(this, w-1, h-1);
while (ptr <= end)
*ptr++ = val;
}
template <class T>
image<T> *image<T>::copy() const
{
image<T> *im = new image<T>(w, h, false);
memcpy(im->data, data, w * h * sizeof(T));
return im;
}