CoreGraphics图像调整大小

时间:2012-06-12 09:29:08

标签: iphone ios ios5 core-graphics

此代码来自Apple的WWDC 2011 Session 318 - iOS Performance in Depth,并使用CoreGraphics从服务器托管的图像创建缩略图。

CGImageSourceRef src = CGImageSourceCreateWithURL(url);
NSDictionary *options = (CFDictionaryRef)[NSDictionary 
dictionaryWithObject:[NSNumber numberWithInt:1024
forKey:(id)kCGImageSourceThumbnailMaxPixelSize];

CGImageRef thumbnail = CGImageSourceCreateThumbnailAtIndex(src,0,options);
UIImage *image = [UIImage imageWithCGImage:thumbnail];
CGImageRelease(thumbnail);
CGImageSourceRelease(src); 

但它不起作用,文档并没有真正帮助。在 iOS 文档CGImageSource CGImageSourceRef CGImageSourceCreateThumbnailAtIndex可用

  

在Mac OS X v10.4或更高版本中

我怎样才能让它发挥作用?

修改

这些是我得到的编译器错误:

  • 使用未声明的标识符'CGImageSourceRef'
  • 使用未声明的标识符'kCGImageSourceThumbnailMaxPixelSize'
  • 使用未声明的标识符'src'
  • 函数'CGImageSourceCreateThumbnailAtIndex'的隐式声明在C99中无效
  • 函数'CGImageSourceRelease'的隐式声明在C99中无效
  • 函数'CGImageSourceCreateWithURL'的隐式声明在C99中无效

2 个答案:

答案 0 :(得分:15)

男生错误。

未添加#import <ImageIO/ImageIO.h>

答案 1 :(得分:3)

尝试调整图片大小:

-(UIImage*) resizedImage:(UIImage *)inImage:(CGRect) thumbRect
{
    CGImageRef          imageRef = [inImage CGImage];
    CGImageAlphaInfo    alphaInfo = CGImageGetAlphaInfo(imageRef);

    // There's a wierdness with kCGImageAlphaNone and CGBitmapContextCreate
    // see Supported Pixel Formats in the Quartz 2D Programming Guide
    // Creating a Bitmap Graphics Context section
    // only RGB 8 bit images with alpha of kCGImageAlphaNoneSkipFirst, kCGImageAlphaNoneSkipLast, kCGImageAlphaPremultipliedFirst,
    // and kCGImageAlphaPremultipliedLast, with a few other oddball image kinds are supported
    // The images on input here are likely to be png or jpeg files
    if (alphaInfo == kCGImageAlphaNone)
        alphaInfo = kCGImageAlphaNoneSkipLast;

    // Build a bitmap context that's the size of the thumbRect
    CGContextRef bitmap = CGBitmapContextCreate(
                                                NULL,
                                                thumbRect.size.width,       // width
                                                thumbRect.size.height,      // height
                                                CGImageGetBitsPerComponent(imageRef),   // really needs to always be 8
                                                4 * thumbRect.size.width,   // rowbytes
                                                CGImageGetColorSpace(imageRef),
                                                alphaInfo
                                                );

    // Draw into the context, this scales the image
    CGContextDrawImage(bitmap, thumbRect, imageRef);

    // Get an image from the context and a UIImage
    CGImageRef  ref = CGBitmapContextCreateImage(bitmap);
    UIImage*    result = [UIImage imageWithCGImage:ref];

    CGContextRelease(bitmap);   // ok if NULL
    CGImageRelease(ref);

    return result;
}

我在我的代码中使用了一段时间,但我不记得它的来源

也试试这个 resizing a UIImage without loading it entirely into memory?