Эффективное создание миниатюр в iPhone - PullRequest
4 голосов
/ 12 июня 2010

Какой самый эффективный способ создать миниатюру из произвольного веб-изображения в iPhone?

Ответы [ 3 ]

8 голосов
/ 29 ноября 2012

сравнение двух методов быстрого создания миниатюр из изображения пожалуйста, смотрите эту ссылку для деталей 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, а также использует немного меньше памяти .

1 голос
/ 13 июня 2010
0 голосов
/ 25 июня 2010

Единственный способ, который я нашел, который работает на любых изображениях, - это показать его в ImageView с правильным размером, а затем создать растровое изображение из этого представления.

Хотя это далеко не эффективно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...