这个嵌套循环C++有什么问题?
What's wrong with this C++ nested for loop?
for (int pixel = 0; pixel < imgVector.size(); pixel++)
{
for (int x = 0; x < image.getSize().x; x++)
{
for (int y = 0; y < image.getSize().y; y++)
{
pulledImage.setPixel(x, y, sf::Color::Color(imgVector.at(pixel)));
pixel++;
}
}
}
所以在这个代码中,我试图循环一个向量并使用SFML将其内容放入图像中,但是除非我有pixel++;放在循环内部它会被卡住,我觉得有pixel++;在循环中是不正确的,可能会导致我的程序出现问题。任何帮助不胜感激!
您pixel
递增太多倍,最终使用越界索引访问imageVector
。
for (int pixel = 0; pixel < imgVector.size(); pixel++)
{
for (int x = 0; x < image.getSize().x; x++)
{
for (int y = 0; y < image.getSize().y; y++)
{
pulledImage.setPixel(x, y, sf::Color::Color(imgVector.at(pixel)));
// This line does not make sense.
// Why do you need to increment pixel here?
pixel++;
}
}
}
我猜你需要这样的东西:
size_t pixel = 0;
for (int x = 0; x < image.getSize().x; x++)
{
for (int y = 0; y < image.getSize().y; y++, ++pixel)
{
assert(pixel < imgVector.size());
pulledImage.setPixel(x, y, sf::Color::Color(imgVector.at(pixel)));
}
}
您应该记住,sf::Image::setPixel()
并不是真正用于更新整个映像的。您不断锁定/解锁数据,与直接访问相比,数据的性能会很差。
如果您想从原始图像数据创建sf::Image
,我建议您改用sf::Image::create()
重载之一:
sf::Image image;
image.create(width, height, reinterpret_cast<sf::Uint8*>(&imgVector[0]));
这应该创建一个包含所有图像数据的新映像。 width
和height
必须具有适当的尺寸。
相关文章:
- 警告处理为错误这里有什么问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 当我尝试添加 2 个大字符串时,我无法弄清楚出了什么问题
- 违反const正确性:我应该现实地期待什么问题
- 这个带有模板<类 Vector 的C++代码片段有什么问题>
- 我的逻辑反转字符串中的元音有什么问题?
- 需要以下代码的帮助,下面的代码有什么问题
- 常量公共成员有什么问题?
- 以下代码中的函数模板有什么问题?
- 这个返回元素位置的基于循环的函数有什么问题?
- creat_list2功能有什么问题?
- 格式说明符C++有什么问题
- 任何人都可以告诉我我的 C++ 代码出了什么问题?
- 从 argv[1] 转换为字符 * 字符串后有什么问题?
- 我的堆栈和库存清单程序的结构有什么问题?
- 此工厂功能有什么问题?
- 以下 C++ 代码有什么问题?
- 数组为此合并排序函数提供了正确的输出,但向量给出了不正确的输出.出了什么问题?
- reinterpret_cast,只读访问,简单的可复制类型,会出什么问题?
- 它解决了什么问题,对于非真空初始化,生命周期在初始化之前就开始了