C++ 如何使用c++;?

C++ 如何使用c++;?,c++,png,extract,pixel,C++,Png,Extract,Pixel,是否有图像库允许用户从已加载到磁盘上的png文件中提取像素而无需解压缩 因此,我有100k大小为512x512的8位图像,在png格式中,每个图像的大小约为10kb。这意味着我只需要1GB的RAM就可以在运行时存储程序Im编写时的所有图像 有可能从这样的图像中高效地检索像素吗? 也就是说,假设我有一个数组images,其中images[I]引用一个已加载但未解压缩到RAM的png图像(加载png图像时会发生这种情况吗?) 那么理想情况下,我想写一些 pixel = images[i].getPi

是否有图像库允许用户从已加载到磁盘上的png文件中提取像素而无需解压缩

因此,我有100k大小为512x512的8位图像,在png格式中,每个图像的大小约为10kb。这意味着我只需要1GB的RAM就可以在运行时存储程序Im编写时的所有图像

有可能从这样的图像中高效地检索像素吗? 也就是说,假设我有一个数组
images
,其中
images[I]
引用一个已加载但未解压缩到RAM的png图像(加载png图像时会发生这种情况吗?)

那么理想情况下,我想写一些

pixel = images[i].getPixel(x,y);

有人知道这是否可能吗?哪个图书馆?我的假设哪里是错误的?

我认为你的要求不实际。幸运的是,这也是不必要的,只要您不同时在内存中保存所有未压缩的图片


难道你不能简单地按需(加载和)解压缩,然后在不再需要时立即释放内存吗?

我认为你的要求不实用。幸运的是,这也是不必要的,只要您不同时在内存中保存所有未压缩的图片


你不能简单地按需(加载和)解压缩,然后在不再需要时释放内存吗?

首先,我不确定我是否理解你关于不将图像解压缩到RAM中的要求

虽然它可能比您要查找的库更多,但Cinder库允许您轻松加载图像并使用Surface类迭代像素

下面是一个关于如何执行此操作的精彩教程:


首先,我不确定我是否理解您关于不将图像解压缩到RAM中的要求

虽然它可能比您要查找的库更多,但Cinder库允许您轻松加载图像并使用Surface类迭代像素

下面是一个关于如何执行此操作的精彩教程:


我认为如果不解压缩图像的前一部分,就无法获得像素。当你打开一个文件时,它只会指向磁盘上的压缩数据。当您在PNG库中运行它时,它将被解压缩

我认为,你最好的选择,以及阅读和书写PNG的规范库,是。它提供了对图像数据和元数据的高级底层访问,可能是最快/最有效的选择。它允许你逐行解压数据(可能是逐块解压——我不记得了),所以你可以解压直到得到你的像素,然后扔掉解压后的数据,移动到下一幅图像


缺点是它可能不像其他一些选项那样对程序员友好。在我看来,这些文档非常全面,甚至有些乏味,但可能还有更简单的教程。另一方面,您可能需要手册中的所有细节来完成您要进行的最小解压缩。它还将有助于解释PNG文件格式,以便您可以更好地管理数据到块级别。

我认为,如果不解压缩图像的至少前一部分,您将无法获得像素。当你打开一个文件时,它只会指向磁盘上的压缩数据。当您在PNG库中运行它时,它将被解压缩

我认为,你最好的选择,以及阅读和书写PNG的规范库,是。它提供了对图像数据和元数据的高级底层访问,可能是最快/最有效的选择。它允许你逐行解压数据(可能是逐块解压——我不记得了),所以你可以解压直到得到你的像素,然后扔掉解压后的数据,移动到下一幅图像


缺点是它可能不像其他一些选项那样对程序员友好。在我看来,这些文档非常全面,甚至有些乏味,但可能还有更简单的教程。另一方面,您可能需要手册中的所有细节来完成您要进行的最小解压缩。它还将有助于解释PNG文件格式,以便您可以更好地管理数据到块级别。

我认为您可以满足这些要求的最好方法是将所有PNG压缩到内存中(如您所示,大约1GB),并且在希望从中获取像素时,一次只解压缩一个PNG。解压缩的512x512 8位灰度图像的缓冲区大小为256KB。如果图像是RGB,则大小为768KB。如果您还有alpha通道,那么大小将为1MB

您可以找到一个非常轻量级和简单的库来解压缩PNG

如果要隐藏图像在内存中被压缩的事实,可以将压缩的PNG数据放在图像类中。如果图像被压缩,此类中的
getPixel(x,y)
方法将触发解压缩。此类中的类成员可以跟踪已解压缩的图像,当另一个图像需要解压缩时,前一个图像可以删除其解压缩的缓冲区


这样的解决方案唯一的问题是,如果对100K图像进行迭代,只需要一个像素,系统就可以移动到下一个像素。为了避免这种情况,您需要从一张图像中获取所需的所有信息,然后再转到下一张图像。

我认为您可以满足这些要求的最好方法是将所有PNG压缩到内存中(如您所示,大约1GB),并且当您希望从中获取像素时,每次只解压缩一个PNG。解压缩的512x512 8位灰度图像的缓冲区大小为256KB。如果图像是RGB,则大小为768KB。如果还有alpha通道,则大小将为1