我是sfml的新手,想要分别处理图像的每个像素。
我看到的最佳方法是迭代此图像中所有像素的数组。 Sfml为此提供了方便的函数sf::Image::getPixelsPtr()。不幸的是,我无法理解返回的数组。
我不明白这方面的文档,我究竟能如何访问此数组中某个像素的颜色值?
答案 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];
}