【发布时间】:2021-02-01 12:56:17
【问题描述】:
我想将图像保存到自定义文件中,以保护我程序的所有图像。
我试图保存这样的图像的每个像素(作为 Uint32)(我正在使用 SFML)
void fromPNGtoCustomFile(sf::Texture texture, std::string path)
{
std::ofstream fo;
fo.open(path);
sf::Image image=texture.copyToImage(); //GET IMAGE OF THE TEXTURE
fo << image.getSize().x << " " << image.getSize().y << " "; // WRITE THE SIZE OF THE IMAGE
for(unsigned int i=0; i< image.getSize().x; i++)
{
for(unsigned int j=0; j< image.getSize().y; j++)
{
fo << image.getPixel(i, j).toInteger() << " ";
// image.getPixel(x, y).toInteger() RETURNS A Uint32 VALUE
}
}
fo.close();
}
然后我使用相同的逻辑从文件中加载图像。
它有效,但我意识到我创建的文件大小约为 250 Mb,而我的原始 .png 图像只有 8 Mb。如果我使用 7Zip 压缩新文件,我会得到一个 8 Mb 的文件,作为原始大小。我不明白为什么我会得到这个尺寸。
我真的不知道创建用于保存图像的自定义文件的最佳方法是什么。
您对我的代码有什么建议或更正吗?
【问题讨论】:
-
您不了解的压缩到底是什么? Png 文件已压缩。
-
我不确定这里的问题是什么。您的代码效率非常低,但并非不正确。那你到底想要什么?
-
好吧,我有一个名为“ressources”的文件夹,用于存储我程序的所有图像。我不希望任何人窃取它们,所以我想创建一个自定义文件和某种“加密”图像数据。我不知道我的问题是否清楚
-
@Peanut_Butcher 上面的代码在什么方面没有实现呢?我仍然对您对我们的期望感到困惑(这是我上一条评论的真正含义)。
-
如果您关心的是加密,那么为什么不使用加密库(例如 libcrypt),将图像保存为 jpeg 格式但已加密。