Mik*_*012 3 macos cocoa memory-management nsimageview image-scaling
我正在从大图像创建小的 NSImageViews(32x32 像素),通常为 512x512 甚至 4096 x 2048,用于极端测试用例。我的问题是,在我的极端测试案例中,当我显示缩略图时,我的应用程序内存占用似乎增加了 15MB 以上,这让我认为 NSImage 以 4096x2048 而不是 32x32 的形式存储在内存中,我想知道是否有是一种避免这种情况的方法。这是我创建 NsImageView 的过程:
• 首先,我使用 initByReferencingFile 创建一个 NSImage:(指向 4096x2048 .png 文件)
• 接下来,我通过调用 initWithFrame 来初始化 NSImageView:
• 然后我调用 setImage: 将我的 NSImage 分配给 NSImageView
• 最后我将 NSImageView 设置为 NSScaleProportionally
我显然没有采取任何措施强制 NSImage 缩小到 32x32,但我很难找到处理这个问题的好方法。
您可以简单地NSImage
从release
原始图像创建一个新的 32x32 ,然后是原始图像。
首先,创建 32x32 图像:
NSImage *smallImage = [[NSImage alloc]initWithSize:NSMakeSize(32, 32)];
Run Code Online (Sandbox Code Playgroud)
然后,将焦点锁定在图像上并在其上绘制原件:
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];
Run Code Online (Sandbox Code Playgroud)
然后你可以随意使用较小的图像:
[imageView setImage:smallImage];
Run Code Online (Sandbox Code Playgroud)
记住release
!
[originalImage release];
[smallImage release];
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2702 次 |
最近记录: |