iPhone App Dev中的大型PNG图像

时间:2011-10-21 04:04:14

标签: iphone performance image compression

我对我在iPhone应用中使用的png图像有疑问。我有很多不同视图的大图像,它们是压缩的,但我想知道这是否会减慢应用程序的速度。就像在初始加载时间和加载不同的视图基本上我需要知道如何通过调整图像使应用程序更小和更快?或者,如果它甚至值得搞乱它?

我已经对这个主题进行了研究,但除了压缩图像之外,我还没有找到任何可行的解决方案。

非常感谢任何帮助?

2 个答案:

答案 0 :(得分:2)

希望,这有助于!!!

http://www.iphonedevsdk.com/forum/iphone-sdk-development/7307-resizing-photo-new-uiimage.html

      -(UIImage *)resizeImage:(UIImage *)image {

CGImageRef imageRef = [image CGImage];
CGImageAlphaInfo alphaInfo = CGImageGetAlphaInfo(imageRef);
CGColorSpaceRef colorSpaceInfo = CGColorSpaceCreateDeviceRGB();

if (alphaInfo == kCGImageAlphaNone)
    alphaInfo = kCGImageAlphaNoneSkipLast;

int width, height;

width = 640;
height = 480;

CGContextRef bitmap;

if (image.imageOrientation == UIImageOrientationUp | image.imageOrientation == UIImageOrientationDown) {
    bitmap = CGBitmapContextCreate(NULL, width, height, CGImageGetBitsPerComponent(imageRef), CGImageGetBytesPerRow(imageRef), colorSpaceInfo, alphaInfo);

} else {
    bitmap = CGBitmapContextCreate(NULL, height, width, CGImageGetBitsPerComponent(imageRef), CGImageGetBytesPerRow(imageRef), colorSpaceInfo, alphaInfo);

}

if (image.imageOrientation == UIImageOrientationLeft) {
    NSLog(@"image orientation left");
    CGContextRotateCTM (bitmap, radians(90));
    CGContextTranslateCTM (bitmap, 0, -height);

} else if (image.imageOrientation == UIImageOrientationRight) {
    NSLog(@"image orientation right");
    CGContextRotateCTM (bitmap, radians(-90));
    CGContextTranslateCTM (bitmap, -width, 0);

} else if (image.imageOrientation == UIImageOrientationUp) {
    NSLog(@"image orientation up"); 

} else if (image.imageOrientation == UIImageOrientationDown) {
    NSLog(@"image orientation down");   
    CGContextTranslateCTM (bitmap, width,height);
    CGContextRotateCTM (bitmap, radians(-180.));

}

CGContextDrawImage(bitmap, CGRectMake(0, 0, width, height), imageRef);
CGImageRef ref = CGBitmapContextCreateImage(bitmap);
UIImage *result = [UIImage imageWithCGImage:ref];

CGContextRelease(bitmap);
CGImageRelease(ref);

return result;  

}

答案 1 :(得分:1)

当您使用自己的应用时,您是否注意到加载时间较慢?如果没有,那么不要打扰图像,如果有的话,收益将是最小的。

如果您在应用加载时遇到问题,请不要认为它是PNG。使用提供的工具并分析您的应用程序,以找出缓慢的部分是什么,并从那里开始。永远不要假设你知道慢代码的原因是什么。