【问题标题】:Creating memory efficient thumbnails using an NSImageView (cocoa/OSX)使用 NSImageView (cocoa/OSX) 创建内存高效的缩略图
【发布时间】:2011-09-26 22:45:11
【问题描述】:

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

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

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

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

• 最后我将 NSImageView 设置为 NSScaleProportionally

我显然没有做任何事情来强制 NSImage 缩小到 32x32,但我很难找到处理这个问题的好方法。

【问题讨论】:

    标签: macos cocoa memory-management image-scaling nsimageview


    【解决方案1】:

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

    首先,创建 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];
    

    记得release

    [originalImage release];
    [smallImage release];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-31
      • 2011-12-31
      • 2013-01-21
      • 2011-04-12
      相关资源
      最近更新 更多