如何在iPhone中加载高品质.gif图像

时间:2012-09-13 05:17:55

标签: iphone objective-c ios uiimageview animated-gif

通过提取.gif图像,我获得了48帧,分辨率为(1024 * 768)。我将这些帧存储在这样的数组中。

NSMutableArray *splashImages = [[NSMutableArray alloc] init];
    for(int i=1;i <= 48;i ++)
    {
        [splashImages addObject:[UIImage imageNamed:[NSString  stringWithFormat:@"img%d.jpg",i]]];
    }
    [ImageView setAnimationImages:splashImages];
    [ImageView setAnimationDuration:1.0];
    [ImageView startAnimating];

我把这个给了UIImageView,持续时间为1秒,通过运行应用程序,它就像平滑的动画一样,甚至卡住了。

任何解决方案?

2 个答案:

答案 0 :(得分:1)

在所有情况下,如果您将所有48张图像加载到内存中,我担心可能会导致内存警告,请使用仪器进行检查。

================================

您可能需要强制它执行解压缩和渲染,请检查此link1和此link2

试试这个,它会导致图像解压缩,即使图像上下文只有1个像素大。:

UIGraphicsBeginImageContext(CGSizeMake(1, 1));
    [decompressedImage drawAtPoint:CGPointZero];
UIGraphicsEndImageContext();

或类似的东西:

CGDataProviderRef imageDataProvider = CGDataProviderCreateWithCFData((__bridge CFDataRef)imageData);
    CGImageRef image = CGImageCreateWithJPEGDataProvider(imageDataProvider, NULL, NO, kCGRenderingIntentDefault);
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    CGContextRef bitmapContext = CGBitmapContextCreate(NULL, CGImageGetWidth(image), CGImageGetHeight(image), CGImageGetBitsPerComponent(image), 0, colorSpace, kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Little);
    CGColorSpaceRelease(colorSpace);
    CGContextDrawImage(bitmapContext, CGRectMake(0, 0, CGImageGetWidth(image), CGImageGetHeight(image)), image);

    CGDataProviderRelease(imageDataProvider);
    CGContextRelease(bitmapContext);

    if (image){
        decompressedImage = [UIImage imageWithCGImage:image];
        CGImageRelease(image);
    }

希望这有用。

答案 1 :(得分:0)

你的方法不会起作用。有关您将遇到的问题的一些示例,请参阅how-to-resolve-memory-crash-in-iphoneloading-images-for-animation-in-uiimageview-ios。只需在h.264中编码电影并使用AVPlayer播放它就会更好。这比创建一堆全屏.gif文件要好得多。