我想从 2d 数组加载 sfml 中的图像,每个像素 (RGB) 包含 3 个值。该数组看起来像这样:
{
{{255, 255, 255}, {255, 255, 255}},
{{255, 255, 255}, {255, 255, 255}}
}
上面的数组描述了一个 2x2 的白色图像。如何将其转换为 sfml 中的图像 (sf::Image
)?
最佳答案
如果您想从像素数组创建 sf::Image
对象,那么您会对 sf::Image::create()
感兴趣。采用 const Uint8 * 的成员函数重载:
void sf::Image::create(unsigned int width, unsigned int height, const Uint8 * pixels);
顾名思义,最后一个参数 pixels
对应于您要从中创建 sf::Image
的像素数组。请注意,假设此像素阵列位于 RGBA format 中。 (这与问题代码中建议的 RGB 格式形成对比)。也就是说,该数组必须为每个像素保存四个Uint8
- 即每个组件都有一个Uint8
: 红色、绿色、蓝色和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 像素图像,但是,翻转图像的 宽度 和 高度 参数传递给 sf::Image::create()
如下所示:
sf::Image image;
image.create(2, 3, pixels);
这会产生 2x3 像素图像:
但是请注意,上面的两个 sf::Image
对象都是从同一个像素数组 pixels
创建的,并且它们都由 六个像素——像素的排列方式不同,因为图像具有不同的尺寸。尽管如此,像素是相同的:黑色、红色、绿色、蓝色、白色和灰色像素。
关于c++ - 如何从 SFML 中的像素数组加载 sf::Image?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63947352/