Cocoa 我想为700 MB到800 MB的图像大小分配内存

Cocoa 我想为700 MB到800 MB的图像大小分配内存,cocoa,Cocoa,我正在尝试分配内存 NSImage*原始分配映像 NSURL*fileURL=[NSURL fileURLWithPath:originalLocation]//originalLocation是磁盘中的文件路径 originalLocationImage=[[NSImage alloc]initByReferencingURL:fileURL] NSBitmapImageRep *sourceRep = [[NSBitmapImageRep alloc]initWithData:[Source

我正在尝试分配内存 NSImage*原始分配映像

NSURL*fileURL=[NSURL fileURLWithPath:originalLocation]//originalLocation是磁盘中的文件路径

originalLocationImage=[[NSImage alloc]initByReferencingURL:fileURL]

NSBitmapImageRep *sourceRep = [[NSBitmapImageRep alloc]initWithData:[SourceImage TIFFRepresentation]]  //this line fails to allocate memory
对于大型图像,它也失败了/

并抛出错误

malloc: *** mmap(size=268435456) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
对于小图像,它可以正常工作


有什么帮助吗?

我想问一下,为什么您首先要将所有图像加载到内存中?当然,将其作为平铺集处理会是一个更好的选择


您收到此消息是因为,虽然您可能有这么多的内存可用空间,但您没有这么多连续的内存可用空间

我想问您为什么要首先将所有图像加载到内存中-当然,将其作为磁贴集处理会是一个更好的选择


您收到此消息是因为,虽然您可能有这么多的内存可用空间,但您没有这么多连续的内存可用空间

如果您只需要预览,您可以逐行阅读,每n行跳过一次,每n行跳过一次像素。你剩下的是一个更小的图像,如果需要,你可以通过更复杂的缩放算法,或者你可以将它保存为缩略图或其他任何形式。

如果你只想预览,你可以逐行阅读,每n行跳过一次,每n行跳过一次。剩下的是一个(非常)小的图像,如果需要,您可以通过更复杂的缩放算法,或者您可以将其保存为缩略图或其他任何形式。

使用libjpeg可能是一个选项,它似乎能够进行高达16的优化子缩放:


libjpeg是纯C,因此您可以从Objective-C调用它。

使用libjpeg可能是一个选项,它似乎能够进行优化的子缩放,最大可扩展到16:



libjpeg是纯C,因此可以从Objective-C调用它。

如果只想创建图像预览,CGImageSource有专门用于此的API。它们是最早的,不需要将整个图像读取到内存中。

如果您只想创建图像预览,CGImageSource有专门用于此的API。它们是第一个,不需要将整个图像读取到内存中。

之后,我想创建该图像的预览,那么什么是更好的方法呢。我尝试了很多东西,但现在找不到任何方法。在那之后,我想创建该图像的预览,那么有什么更好的方法可以做到这一点。我尝试了很多东西,但现在找不到任何方法。我对这行代码有问题,对于tiff图像,我也尝试了1 GB大小的psd图像,效果很好NSBitmapImageRep*sourceRep=[[NSBitmapImageRep alloc]initWithData:[SourceImage TIFFRepresentation]]//此行无法分配内存在这种情况下如何分配内存有任何建议。对于tiff图像,我得到的其他错误是:tiff数据提供程序:没有空间获取标记值。如果相同的代码段将加载一个GB psd图像,那么为什么不加载tiff?使用NSImage无法实现您想要的效果。不要忘记JPEG是一种压缩格式,因此800 MB JPEG是2-3 Gb文件的表示形式。NSImage将尝试解压缩800 MB JPEG,因此您无法使用它-您必须使用低级别的内容,如libjpeg,或者按照Blidy的建议自行实现访问。尽管NSImage在幕后显示为单个实现,但它使用不同的代码处理图像格式。PSD!=JPG!=蒂芙每个图像格式都有一个实现,即使在调用initWithData时您看不到这一点。我的这行代码也有问题,对于tiff图像,我尝试了1 GB大小的psd图像,效果很好NSBitmapImageRep*sourceRep=[[NSBitmapImageRep alloc]initWithData:[SourceImage TIFFRepresentation]]//此行无法分配内存在这种情况下如何分配内存有任何建议。对于tiff图像,我得到的其他错误是:tiff数据提供程序:没有空间获取标记值。如果相同的代码段将加载一个GB psd图像,那么为什么不加载tiff?使用NSImage无法实现您想要的效果。不要忘记JPEG是一种压缩格式,因此800 MB JPEG是2-3 Gb文件的表示形式。NSImage将尝试解压缩800 MB JPEG,因此您无法使用它-您必须使用低级别的内容,如libjpeg,或者按照Blidy的建议自行实现访问。尽管NSImage在幕后显示为单个实现,但它使用不同的代码处理图像格式。PSD!=JPG!=蒂芙每个图像格式都有一个实现,尽管在调用initWithData时你看不到。你提出的解决方案听起来不错,但由于格式可能被压缩,他不能二进制跳过输入-他必须先解压缩,然后从解压缩的输出中跳过数据。是的,但你可以分块解压缩,您不必阅读整个图像即可完成此操作。您提出的解决方案听起来不错,但由于格式可能会被压缩,因此他不能二进制跳过输入-他必须先解压,然后从解压后的输出中跳过数据。是的,但您可以分块解压,你不需要阅读整张图片就可以了。直到有人告诉我这门课的情况。我可以创建不同大小和分辨率的预览吗?直到有人告诉我这门课。我可以创建不同大小和分辨率的预览吗?