如何从 SFML 中的像素数组加载 sf::Image?
How to load a sf::Image from an array of pixels in SFML?
我想从每个像素 (RGB) 包含 3 个值的二维数组加载 sfml 中的图像。该数组看起来像这样:
{
{{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
创建的,并且它们都由 6 像素——像素的排列方式不同,因为图像具有不同的尺寸。然而,像素是相同的:黑色、红色、绿色、蓝色、白色和灰色像素。
我想从每个像素 (RGB) 包含 3 个值的二维数组加载 sfml 中的图像。该数组看起来像这样:
{
{{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
创建的,并且它们都由 6 像素——像素的排列方式不同,因为图像具有不同的尺寸。然而,像素是相同的:黑色、红色、绿色、蓝色、白色和灰色像素。