2010-07-30 106 views
3

我有一个IKImageView,我把CGImages(我从NSImages制作)放到它上面。但是,正常的200DPI 8.5/11页面需要3秒钟才会出现,一次出现在边上的2英寸(屏幕)的矩形中。这真的很烦人。有没有解决的办法?IKImageView波涛汹涌?

另外,有没有办法来双缓冲视图?有2个IKImageViews并绘制成一个,然后显示它?

ETA: 倍增我scrollviews(里面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%时,所以一个屏幕像素=一个图像像素,因此它需要使用整个图像,它仍然沿着一页一页的方向正确拉链。

我被最初写这个的人所嘲笑,因为他的版本在他古老的10.3 G5版本上移动速度比在我的最新英特尔盒子上移动得快。通过至少一个假设这些是在RGB颜色的10

+0

你是如何创建NSImage和CGImageRef的? – ergosys 2010-08-08 06:34:10

+0

最初,我正在从扫描仪的位图数据中提取图像。目前,我似乎将它放入一个CGImageProvider,从中获取一个CGImage,将该图像放入一个CGImageDestination转换为NSData,并使用该数据创建一个NSImage。现在,我看着它,它看起来非常愚蠢......人力资源管理。 – 2010-08-09 13:39:30

+0

你解决了你的问题?我有同样的问题 – 2015-09-23 05:50:45

回答

2

200DPI 8.5/11页

因子更快,这是每图像像素的11.22兆字节。您的应用程序使用大量内存,并绘制3.74百万像素(不管色彩空间)会变得缓慢。

2侧

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

如果你有一个缩放设置,你会希望当这些图像发生变化时使这些图像的缓存无效,并且不要在视图被告知绘制时重新计算每个图像。

+0

好吧,1它现在是黑色和白色,但更多的支持,在过去,我使用IKImageView之前,它花费了1/20的时间。我不是很生气。在花费0.1秒来绘制屏幕之前,可能性较小。现在是2秒。这是一个很长的时间...它只需要1/2秒来扫描页面... – 2010-07-31 00:34:28

+0

您应该在乐器中描述您的应用程序,并查看它在这段时间的花费。 – 2010-07-31 01:38:20

+0

我应该使用哪种仪器?仪器似乎是一个巨大的工具,我从来没有完全想到它...... – 2010-08-02 15:31:19

相关问题