我一直在使用以下代码在屏幕外创建一个图像(
context
使用在后台线程中创建一个屏幕外的图像),然后
仅当我收到更新的“UIImages 数组”时才在屏幕上的主线程中GDC
渲染它
。
通过这样做,我发现渲染路径、线条等比UIView 的 drawRect: 方法
要快得多。
我现在面临的问题是,当尝试使用
CGContextDrawImage()
它渲染 UIImage 类时,渲染速度非常慢,大约需要 1.4-2.5 秒。通过搜索
,主要问题是它大部分时间都在对 png 文件进行放气。我已经
尝试过填充 png 图像并使用CGImageRef
仍然很长的渲染时间。我没有
对包含列表的数据数组的控制,如果它进来了 png 文件。
将图像分成小块,或者使用CALayer
帮助,我如何
在不使用“ CGContextDrawImage
”的情况下缝合这些图像是否可能?
我不确定解决这个问题的最佳方法是什么,以及如何,任何想法?
提前致谢
void creatImageInBackground
{
size = CGSizeMake (self.frame.size.width,self.frame.size.height);
UIGraphicsBeginImageContextWithOptions(size, NO, 0.0);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetInterpolationQuality(context, kCGInterpolationNone);
UIGraphicsPushContext(context);
for(UIImage * img in imgList )
{
ulXY = <calcuate >;
lrXY = <calcuate >;
imRec = CGRectMake( ulXY.x,-ulXY.y,(lrXY.x-ulXY.x) ,(lrXY.y -ulXY.y) );
CGContextTranslateCTM( context, 0,(lrXY.y-ulXY.y) );
CGContextScaleCTM(context, 1, -1);
CGContextDrawImage(context, imRec,[[img image] CGImage]);
//[img drawInRect:imRec];
}
UIGraphicsPopContext();
[outputImage release];
outputImage = UIGraphicsGetImageFromCurrentImageContext() ;
[outputImage retain];
UIGraphicsEndImageContext();
dispatch_async(dispatch_get_main_queue(), ^(void)
{
[self setNeedsDisplay];
[self setHidden:NO];
});
}
Then
- (void)drawRect:(CGRect)rect
{
CGPoint imagePoint = CGPointMake(0, 0);
[outputImage drawAtPoint:imagePoint];
}