c++ 初始化stbi_uc而不加载映像

83qze16e  于 2023-02-06  发布在  其他
关注(0)|答案(1)|浏览(100)

我有一个看起来很简单的问题,但我找不到答案。
我想初始化一个新的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而不必保存/加载它也是一种改进。
谢谢大家!

fslejnso

fslejnso1#

我确信现在回答这个问题已经太晚了,但是也许这会在将来帮助到一些人。我会用malloc或者calloc初始化内存。

stbi_uc* myimage = (stbi_uc*)calloc(width * height * channels , 1);

这将创建你的图像,rgba设置为0,0,0,0,现在如果你想做得更快一点,而且你无论如何都要改变所有的像素,我会使用malloc,这是更快的,但会用废话初始化图像。

stbi_uc* myimage = (stbi_uc*)malloc(width * height * channels);

希望这有帮助:)

相关问题