Добавление уменьшенных изображений в таблицу - PullRequest
0 голосов
/ 01 февраля 2012

У меня есть tableview, и я загружаю в него изображения.У меня есть изображения размером от 150 КБ до 2 МБ.Поскольку это слишком много для обработки таблицы (загрузка занимает много времени и замедляет прокрутку), я подумал об использовании ImageIO framework для создания миниатюр изображений изображений.

Я нашел код, которыйделает это, но я не могу понять это.

1.) Может кто-нибудь объяснить, пожалуйста, код

2.) Моя проблема в том, что у меня есть таблица и мне нужно загрузить в нее миниатюры.Итак, как я могу использовать следующий код и отобразить его в моем табличном представлении.Может кто-нибудь показать мне пример кода или учебник, который это делает?

вот код;

-(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);
  }
}

Ответы [ 2 ]

0 голосов
/ 01 февраля 2012

Чтобы повысить производительность, вам нужно загрузить изображение в фоновом потоке, а после того, как оно окажется в памяти, добавить UIImage к представлению изображения в основном потоке.Есть несколько способов сделать это, но самый простой будет использовать методы, основанные на GCD.

Изменение размера изображения определенно все еще важно из соображений памяти, но сначала загрузите асинхронную часть загрузки изображения.

0 голосов
/ 01 февраля 2012

В основном ваша проблема связана с тем, что при уменьшении изображения количество байтов, хранящихся в памяти, не изменяется при его уменьшении. Аппаратное обеспечение все еще должно прочитать ваше изображение размером 2 МБ, а затем отобразить его в меньшем масштабе. Что вам нужно сделать, это изменить размер изображения (использовать фотошоп или другое) или предложить другой способ - сжать изображение, а затем уменьшить его. Изображение будет выглядеть грубым при нормальном размере, но будет выглядеть нормально, когда вы уменьшите изображение до большого пальца.

Чтобы создать версию NSData вашего изображения в формате PNG.

NSData *PNGFile = UIImagePNGRepresentation(myImage); 

Или JPEG с установленным значением качества

NSData *JPEGFile = UIImageJPEGRepresentation(myImage, 0.9f); 

Оба из них дадут вам изображение меньше, чем у вас есть в настоящее время, которое будет легче визуализировать в tableView.

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