1

我一直在使用以下代码在屏幕外创建一个图像(
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];
   }
4

0 回答 0