3

此代码来自 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 中无效
4

2 回答 2

15

小学生的错误。

没有添加#import <ImageIO/ImageIO.h>

于 2012-06-12T10:11:37.377 回答
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;
}

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

试试这个也 调整 UIImage 的大小而不将它完全加载到内存中?

于 2012-06-12T09:58:32.123 回答