如何在 sfml 中使用图像中的像素数组
How to use the pixel array from an image in sfml
我是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];
}
相关文章:
- 如何在不产生任何垃圾的情况下获得C中的像素
- 在C++中使用GDAL可以将图像的像素坐标转换为lat,long吗
- 如何在24位SDL_Surface上设置像素的颜色
- 如何从SDL_Surface获取特定像素的颜色
- 如何将CMSampleBufferRef/CIImage/UIImage转换为像素,例如uint8_t[]
- 在C++中查找像素 RGB 数据的最快方法是什么?
- 是否可以从 OpenGL 缓冲区获取原始大小的像素?
- 选择基于另一个垫子的非零像素的cv::Mat的一部分?
- 如何使用 sdl2 快速绘制像素网格?
- 如何在C++中进行像素操作? - Linux
- 他们如何将红外锁定像素转换为镜头前方 1m 的正常平面上的位置
- 访问随机图像像素的快速方法,最多一次
- OpenCV 像素访问点与 at() - 不同的值
- 如何使用 freetype2 访问单色位图中的像素状态
- 尝试渲染像素坐标时,简单线条渲染失败
- 计算另一个图像像素满足条件的像素值的平均值
- 如何返回定义良好的内存部分?例如来自图像数据的像素的颜色值
- 如何从窗口中获取像素数据像素缓冲区并提取RGB
- 覆盖openGL 2d纹理中的每像素像素
- 有没有办法在不复制所有像素的情况下将现有的像素数组转换为位图