如何在iPhone上加载高质量的.gif图像

3
通过提取 .gif 图像,我得到了分辨率为(1024*768)的48个帧。我将这些帧存储在一个数组中,就像这样。
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];

我用了1秒的时间将这个动画效果给UIImageView,但是在运行应用程序时,它的动画效果不够平滑,甚至还会卡顿。

有什么解决方案吗?

2个回答

1

首先,如果您将48张图片全部加载到内存中,可能会引起内存警告,请使用Instrument进行检查。

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

您可能需要在解压缩和渲染之前强制执行此操作,请查看链接1链接2

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

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);
    }

希望这有所帮助。

谢谢您的想法。但是,解压会导致图像失去质量。 - Vedchi

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接