我有一个看起来很简单的问题,但我找不到答案。
我想初始化一个新的stbi_uc对象,设置它的尺寸等等,而不向它加载图像。(这是因为程序本身将使用该对象创建一个图像,因此不需要加载任何内容。)我找不到这样做的方法。我使用了一个笨拙的解决方案,在此创建一个所需尺寸的空白SFML图像,将其保存到磁盘,然后将其加载回stbi_uc对象:
int width=500;
int height=500;
sf::Image *templateimage=new sf::Image;
templateimage->create(width,height,sf::Color(0,0,0));
bool const ret1(templateimage->saveToFile("Templateimage.tga"));
if (!ret1) {cerr << "Error writing Templateimage.tga" << endl;}
delete templateimage;
int imagewidth, imageheight, imagechannels;
stbi_uc *myimage=new stbi_uc;
myimage=stbi_load("Templateimage.tga",&imagewidth,&imageheight,&imagechannels,STBI_rgb_alpha);
这是可行的,但肯定是荒谬的。我真正想做的是这样的事情:
stbi_uc *myimage=new stbi_uc(width,height,channels);
但那是不可能的。我试过这个,但它不能生成正确的大小:
stbi_uc *myimage=new stbi_uc(width*height*channels);
有没有比现在更好的方法呢?甚至直接将sf::Image转换成stbi_uc而不必保存/加载它也是一种改进。
谢谢大家!
1条答案
按热度按时间fslejnso1#
我确信现在回答这个问题已经太晚了,但是也许这会在将来帮助到一些人。我会用malloc或者calloc初始化内存。
这将创建你的图像,rgba设置为0,0,0,0,现在如果你想做得更快一点,而且你无论如何都要改变所有的像素,我会使用malloc,这是更快的,但会用废话初始化图像。
希望这有帮助:)