gpt4 book ai didi

macos - 使用 NSImageView 创建内存高效的缩略图 (cocoa/OSX)

转载 作者:行者123 更新时间:2023-12-03 16:18:03 27 4
gpt4 key购买 nike

我正在从大图像(通常为 512x512 甚至 4096 x 2048)创建小 NSImageView(32x32 像素),用于极端测试用例。我的问题是,在我的极端测试用例中,当我显示缩略图时,我的应用程序内存占用似乎增加了 15MB 以上,这让我认为 NSImage 是以 4096x2048 而不是 32x32 的形式存储在内存中,我想知道是否有是避免这种情况的一种方法。这是我创建 NsImageView 的过程:

• 首先,我使用 initByReferencingFile 创建一个 NSImage:(指向 4096x2048 .png 文件)

• 接下来,我通过调用 initWithFrame 来初始化 NSImageView:

• 然后我调用 setImage: 将我的 NSImage 分配给 NSImageView

• 最后我将 NSImageView 设置为 NSScaleProportionally

我显然没有采取任何措施来强制 NSImage 大小缩小到 32x32,但我很难找到一个好的方法来处理这个问题。

最佳答案

您可以简单地从原始图像创建一个新的 32x32 NSImage,然后释放原始图像。

首先,创建 32x32 图像:

NSImage *smallImage = [[NSImage alloc]initWithSize:NSMakeSize(32, 32)];

然后,将焦点锁定在图像上并在其上绘制原件:

NSSize originalSize = [originalImage size];
NSRect fromRect = NSMakeRect(0, 0, originalSize.width, originalSize.height);
[smallImage lockFocus];
[originalImage drawInRect:NSMakeRect(0, 0, 32, 32) fromRect:fromRect operation:NSCompositeCopy fraction:1.0f];
[smallImage unlockFocus];

然后您可以对较小的图像进行任意处理:

[imageView setImage:smallImage];

记住要释放!

[originalImage release];
[smallImage release];

关于macos - 使用 NSImageView 创建内存高效的缩略图 (cocoa/OSX),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7562231/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com