结构像素颜色值



我定义了一个结构

struct Pixel { uint8_t r, g, b; };

我有一个功能

void setPixel(int x, int y, const Pixel& color);

我必须输入什么颜色值才能setPixel()函数使其正常工作?我不知道我应该如何定义它。

我在这里错过了什么?

查看为

要调用的函数提供的原型。

void setPixel(int x, int y, const Pixel& color);

观察:

  • 它想要一个参数用于x,一个整数
  • 它想要一个参数用于y,一个整数
  • 它想要一个color参数,一个Pixel
    它恰好是一个参考参数,但这并不立即相关

因此,首先,任何具有三个以上参数的调用都无法正常工作。

其次,您需要给出三个正确类型的参数,前两个为 int 类型,可以是 r 值。您的xy可能没问题,如果它们是 int,如

int x = 5;
int y = 5;

但是,这可能会有点令人困惑,在要调用的函数内部和外部使用相同的名称。所以我推荐

int outsideX = 5;
int outsideY = 5;

第三个参数作为参考参数,需要一个类型为 Pixel 的实际(常量)变量。您需要设置一个。

Pixel outsideColor;
outsideColor.r = 255;
outsideColor.g = 0;
outsideColor.b = 255;
// this will be bright magenta

完成这些准备工作后,您可以将函数调用为

setPixel(outsideX, outsideY, outsideColor);

显然,没有函数将颜色作为三个不同的参数。

相反,您必须使用将结构作为参数的函数。这很容易,就像在

setPixel(some_x, some_y, { some_r, some_g, some_b });

其中定义变量并将其初始化为某些值或直接值。

你只需要正确构造Pixel,例如,你可以使用聚合初始化或手动构造:

struct Pixel { uint8_t r, g, b; };
void setPixel(int x, int y, const Pixel& color) {
  std::cout << "Setting " << x << " " << y << " to: " << (unsigned)color.r << " " << (unsigned)color.g << " " << (unsigned)color.b << std::endl;
}
int main() {
  // Using aggregate init
  setPixel(1, 1, { 255, 255, 255 });
  // Manually
  Pixel pix;
  pix.r = 255;
  pix.g = 255;
  pix.b = 255;
  setPixel(1, 1, pix);
}

最新更新