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将其内容放入一个图像中,但除非我有像素++;放在循环内部它会卡住,我觉得有像素++;在循环中是不正确的,可能会导致我的程序出现问题。任何帮助表示赞赏!
答案 0 :(得分:2)
您正在递增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)));
}
}
答案 1 :(得分:0)
您应该记住,sf::Image::setPixel()
并非真正用于更新整个图像。您经常锁定/解锁数据,与直接访问相比,这会带来糟糕的性能。
如果您想从原始图片数据创建sf::Image
,我建议您使用其中一个sf::Image::create()
重载:
sf::Image image;
image.create(width, height, reinterpret_cast<sf::Uint8*>(&imgVector[0]));
这应创建一个包含所有图像数据的新图像。 width
和height
必须具有适当的尺寸。