сравнение двух методов быстрого создания миниатюр из изображения
пожалуйста, смотрите эту ссылку для деталей
http://www.cocoaintheshell.com/2011/01/uiimage-scaling-imageio/
или же
http://vocaro.com/trevor/blog/2009/10/12/resize-a-uiimage-the-right-way/
на будущее, просто скопируйте код вставки из первого
Первый метод с использованием UIKit
void)buildGallery
{
for (NSUInteger i = 0; i < kMaxPictures; i++)
{
NSInteger imgTag = i + 1;
NYXPictureView* v = [[NYXPictureView alloc] initWithFrame:(CGRect){.origin.x = x, .origin.y = y, .size = _thumbSize}];
NSString* imgPath = [[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"%d", imgTag] ofType:@"jpg"];
UIImage* fullImage = [[UIImage alloc] initWithContentsOfFile:imgPath];
[v setImage:[fullImage imageScaledToFitSize:_thumbSize]];
[fullImage release];
}
Результаты скамей дали мне следующее:
- Time Profiler: 4233мс
- Live байтов: 695Kb
- Общее количество использованных байтов: 78,96 МБ
Второй метод с использованием ImageIO
-(void)buildGallery
{
for (NSUInteger i = 0; i < kMaxPictures; i++)
{
NSInteger imgTag = i + 1;
NYXPictureView* v = [[NYXPictureView alloc] initWithFrame:(CGRect){.origin.x = x, .origin.y = y, .size = _thumbSize}];
NSString* imgPath = [[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"%d", imgTag] ofType:@"jpg"];
CGImageSourceRef src = CGImageSourceCreateWithURL((CFURLRef)[NSURL fileURLWithPath:imgPath], NULL);
CFDictionaryRef options = (CFDictionaryRef)[[NSDictionary alloc] initWithObjectsAndKeys:(id)kCFBooleanTrue, (id)kCGImageSourceCreateThumbnailWithTransform, (id)kCFBooleanTrue, (id)kCGImageSourceCreateThumbnailFromImageIfAbsent, (id)[NSNumber numberWithDouble:_maxSize], (id)kCGImageSourceThumbnailMaxPixelSize, nil];
CGImageRef thumbnail = CGImageSourceCreateThumbnailAtIndex(src, 0, options); // Create scaled image
CFRelease(options);
CFRelease(src);
UIImage* img = [[UIImage alloc] initWithCGImage:thumbnail];
[v setImage:img];
[img release];
CGImageRelease(thumbnail);
}
он дал мне скамейки:
- Time Profiler: 3433мс
- Живые байты: 681Кб
- Общее количество использованных байтов: 77,63Mb
Вы можете видеть, что использование ImageIO примерно на 19% быстрее, чем UIKit, а также использует немного меньше памяти .