2012-06-12 2 views
3

Этот код от WSOP 2011 от Apple 318 - производительность iOS в глубину и использует CoreGraphics для создания эскизов с размещенных на сервере изображений.CoreGraphics Image resize

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 документы CGImageSourceCGImageSourceRefCGImageSourceCreateThumbnailAtIndex доступны

в Mac OS X v10.4 или более поздняя версия

Как я могу получить эту работу?

EDIT

Эти ошибки компилятора я получаю:

  • Использование необъявленной идентификатора 'CGImageSourceRef'
  • Использование необъявленной идентификатора 'kCGImageSourceThumbnailMaxPixelSize'
  • Использование необъявленной Идентификатор 'src'
  • Неявное объявление функции 'CGImageSourceCreateThumbn ailAtIndex»недопустим в C99
  • неявного объявления функции 'CGImageSourceRelease' недопустимо в C99
  • неявного объявления функции 'CGImageSourceCreateWithURL' недопустимо в C99
+1

IOS документы на самом деле [здесь] (http://developer.apple.com/library/ios/#documentation/GraphicsImaging/Reference/CGImageSource/Reference/reference.html) и availabilaty объявляется 'в iOS 4.0 и более поздних версиях'. Попробуйте указать точный источник проблемы. Вы даже получаете действительный 'src'. Постскриптум не рекомендуется обсуждать сессии WWDC вне форума apple.developer - так как все ссылочные функции не находятся под NDA, я предполагаю, что вы o.k. :) –

+0

Ah yep не видел, что iOS 4+ дальше. Отредактировано с ошибками. Кроме того, это из последних лет WWDC, и это нормально? – daidai

+0

Я предполагаю, что все должно быть хорошо, хотя я помню, как кто-то отвлекался. –

ответ

15

Ошибка школьного мальчика.

Не добавлять #import <ImageIO/ImageIO.h>

+0

такая же ошибка здесь ... – Jasmeet

3

Try изображение изменение размер:

-(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?

+0

Спасибо за это, но я специально хотел использовать функцию 'CGImageSourceCreateThumbnailAtIndex' – daidai

+1

http://stackoverflow.com/questions/5860215/resizing-a-uiimage-without-loading-it-entirely-into-memory попробуйте это пожалуйста –