如果您想从像素数组创建sf::Image 对象,那么您对采用const Uint8 * 的sf::Image::create() 成员函数重载感兴趣:
void sf::Image::create(unsigned int width, unsigned int height, const Uint8 * pixels);
顾名思义,最后一个参数pixels 对应于您要从中创建sf::Image 的像素数组。请注意,此像素阵列假定为 RGBA format(这与问题代码中建议的 RGB 格式形成对比)。也就是说,数组必须为 每个像素 保存 四个 Uint8s - 即,每个组件都有一个 Uint8:red,green、blue 和 alpha。
例如,考虑以下像素数组pixels,由六个像素组成:
const unsigned numPixels = 6;
sf::Uint8 pixels[4 * numPixels] = {
0, 0, 0, 255, // black
255, 0, 0, 255, // red
0, 255, 0, 255, // green
0, 0, 255, 255, // blue
255, 255, 255, 255, // white
128, 128, 128, 255, // gray
};
然后,我们可以从pixels 像素数组创建一个sf::Image 对象:
sf::Image image;
image.create(3, 2, pixels);
上面创建的sf::Image 的像素将对应这些:
这是一个 3x2 像素的图像,但是,翻转图像的 width 和 height 参数传递给sf::Image::create() :
sf::Image image;
image.create(2, 3, pixels);
这会产生 2x3 像素的图像:
但是请注意,上面的两个 sf::Image 对象都是从相同的像素数组 pixels 创建的,并且它们都由 六个 像素组成 - 像素只是排列方式不同因为图像有不同的尺寸。然而,像素是相同的:黑色、红色、绿色、蓝色、白色和灰色像素。