如何在 sfml 中使用图像中的像素数组

How to use the pixel array from an image in sfml

本文关键字:像素 像素数 数组 图像 sfml      更新时间:2023-10-16

我是sfml的新手,想单独处理图像的每个像素。

我看到的最好的方法是遍历此图像中所有像素的数组。Sfml为此提供了方便的函数sf::Image::getPixelsPtr((。不幸的是,我无法理解返回的数组。

我不明白这方面的文档,我如何准确访问此数组中某个像素的颜色值?

const Uint8* sf::Image::getPixelsPtr ( ( const

返回值指向由 8 位整数分量组成的 RGBA 像素数组。数组的大小是宽度 * 高度 * 4 (getSize((.x * getSize((.y * 4(。警告:如果修改图像,返回的指针可能会变得无效,因此切勿将其存储太久。如果图像为空,则返回空指针。

据我了解,图像是 8 位 RGBA 格式,他们在图像开头给你一个 Uint8 指针,这将是第一个像素的"R"。

// code edited. was saying 'sd' i changed to 'sf'
const UInt8* pByteBuffer = sf::Image::getPixelsPtr();
size_t numPixels = getSize().x + getSize().y;
for (int i = 0 ; i < numPixels; ++i)
    {
    UInt8 red   = pByteBuffer[4 * i];
    UInt8 green = pByteBuffer[4 * i + 1];
    UInt8 blue  = pByteBuffer[4 * i + 2];
    UInt8 alpha = pByteBuffer[4 * i + 3];
    }
如果你想迭代整个像素而不是

像素内的单一颜色,你可以reinterpret_cast他们给你的指针:

const UInt8* pByteBuffer = sf::Image::getPixelsPtr();
const UInt32* pPixelBuffer = reinterpret_cast<const UInt32*>(pByteBuffer);
size_t numPixels = getSize().x * getSize().y;
for (int i = 0; i < numPixels; ++i)
    {
    uint32_t pixel = pPixelBuffer[i];
    }