objective-c - IKImageView 不稳定?

标签 objective-c cocoa nsimage ikimageview

我有一个 IKImageView,我正在将 CGImages(我用 NSImages 制作)放到它上面。然而,一个普通的 200DPI 8.5/11 页面需要大约 3 秒才能出现,一次出现在边长约 2 英寸(屏幕)的矩形中。这真的很烦人。有解决办法吗?

或者,有没有办法对 View 进行双重缓冲?要有 2 个 IKImageViews 并绘制成一个,然后显示它?

预计到达时间: 加倍我的 ScrollView (里面有 ikimageviews)然后绘制到它们中,然后取消隐藏它们,似乎没有帮助......或者,也许它有一点帮助,但帮助不大

我用工具做了一些探索,发现在 memcopy 中似乎做了很多工作:

  22 commpage [libSystem.B.dylib] 78.0  __memcpy
  21 ImageIO 37.0  CGImageReadGetBytesAtOffset
  20 ImageIO 37.0  CGImageReadSessionGetBytes
  19 ImageIO 37.0  myTIFFReadProc
  18 libTIFF.dylib 37.0  TIFFReadRawStrip1
  17 libTIFF.dylib 37.0  TIFFFillStrip
  16 libTIFF.dylib 37.0  _cg_TIFFReadEncodedStrip
  15 ImageIO 37.0  copyImageBlockSetTIFF
  14 ImageIO 37.0  ImageProviderCopyImageBlockSetCallback
  13 CoreGraphics 37.0  CGImageProviderCopyImageBlockSet
  12 CoreGraphics 37.0  img_blocks_create
  11 CoreGraphics 37.0  img_blocks_extent
  10 CoreGraphics 37.0  img_interpolate_extent
   9 CoreGraphics 37.0  img_data_lock
   8 CoreGraphics 37.0  CGSImageDataLock
   7 libRIP.A.dylib 37.0  ripc_AcquireImage
   6 libRIP.A.dylib 37.0  ripc_DrawImage
   5 CoreGraphics 37.0  CGContextDrawImage
   4 ImageKit 37.0  -[IKImageLayer drawInContext:]
   3 QuartzCore 37.0  tiled_layer_render(_CAImageProvider*, unsigned int, unsigned int, unsigned int, unsigned int, void*)
   2 QuartzCore 37.0  CAImageProviderThread(void*)
   1 libSystem.B.dylib 37.0  _pthread_wqthread
   0 libSystem.B.dylib 37.0  start_wqthread

虽然我不确定这告诉我什么......

编辑:郑重声明,问题是不是数据大小。我有一个旧版本的程序,它使用已弃用的 quickdraw 方法调用。当我将图像放大到 300% 时,一个屏幕像素 = 一个图像像素,因此它需要使用整个图像,它仍然会一页一页地压缩。

我被最初写这篇文章的人 mock 了,因为他的版本在他古老的 10.3 G5 上比在我最新的 Intel 机器上运行得更快。速度至少提高 10 倍。

最佳答案

200DPI 8.5/11 page

假设这些是 RGB 颜色,则每张图像有 11.22 兆字节的像素。您的应用程序使用大量内存,绘制 3.74 兆像素(无论颜色空间如何)会很慢。

2 inches (screen) on a side

利用它。使用 72 dpi 常量和 the window's user-space scale factor 计算出 2 英寸是多少屏幕像素,并将您的页面栅格化为该大小。目前,这些矩形的边有 144 个点,144×144 的图像在内存和绘制方面非常高效。

如果您有缩放设置,您会希望在这些图像发生变化时使这些图像的缓存失效,并在不早于您的 View 被告知绘制时重新计算每个图像。

关于objective-c - IKImageView 不稳定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3372450/

相关文章:

macos - 我的带图标的 NSButton 没有图标

objective-c - Cocoa,objective-c 如何调整 png 图像的大小?

iphone - UITableView数据在滚动时多次显示

ios - 在 iOS 6.1 上,UISwitch IBOutlet 始终为 nil

cocoa - NSSegmented 控件未选择

cocoa - 旧窗口关闭后新窗口的位置

objective-c - 如何让 NSTextView 随文本一起增长?

objective-c - 将 NSDate 转换为其他格式

cocoa - 为想要开始为 Cocoa Touch/iOS 开发的 Cocoa/Mac 程序员的快速入门指南/备忘单指南的指针?

iphone - 模拟NSImage绘制矩形:fromRect:operation:fraction with UIImage