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

时间:2017-03-31 12:22:18

标签: c++ arrays pixel sfml

我是sfml的新手,想要分别处理图像的每个像素。

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

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

1 个答案:

答案 0 :(得分:0)

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

返回值指向由8位整数分量组成的RGBA像素数组。数组的大小是width * height * 4(getSize()。x * getSize()。y * 4)。警告:如果修改图像,返回的指针可能会变为无效,因此您永远不应将其存储太长时间。如果图像为空,则返回空指针。

根据我的理解,图像是8位RGBA,它们在图像的开头给你一个Uint8指针,它是第一个像素的'R'。

Entity.find(Task.class, taskId)

如果你想在整个PIXELS上迭代,而不是在像素内迭代单色,你可以重新解释它们给你的指针:

const UInt8* pByteBuffer = sd::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];
    }