Создание миниатюры изображения в iPhone? - PullRequest
1 голос
/ 11 апреля 2011

Я пытаюсь создать миниатюру изображения, которое я импортирую из библиотеки фотографий или камеры, используя UIImagePickerController, используя - (void) imagePickerController: (UIImagePickerController *) средство выбора didFinishPickingImage: (UIImage *) selectedImage EditInfo) editInfo когда я использую камеру, легко создается миниатюра кликаемого изображения, но когда то же самое делается путем выбора изображения из библиотеки фотографий, мое приложение вылетает. Когда я включил NSZombie в моем приложении, он показывает f- [UIImage drawInRect:]: сообщение отправлено в освобожденный экземпляр 0x5abc140 в переменной myThumbnail ..

Что я могу сделать неправильно ??

 - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)selectedImage editingInfo:(NSDictionary *)editingInfo
{
     [self saveImage:selectedImage];
}
- (void)saveImage:(UIImage *)img
{
    myThumbNail = img;

    UIGraphicsBeginImageContext(CGSizeMake(60.0,60.0));

    [myThumbNail drawInRect:CGRectMake(0.0, 0.0, 60.0, 60.0)];// gets killed here
}

Ответы [ 3 ]

3 голосов
/ 11 апреля 2011

Что такое изображение в вашем методе saveImage:?Я думаю, что это должно быть img.Надеюсь, это поможет

- (void)saveImage:(UIImage *)img
{
    [img retain];
    //alloc your myThumbNail before this
    myThumbNail = img;
    [img release];
    UIGraphicsBeginImageContext(CGSizeMake(60.0,60.0));

    [myThumbNail drawInRect:CGRectMake(0.0, 0.0, 60.0, 60.0)];// gets killed here

}
1 голос
/ 30 марта 2015
+ (UIImage *)resizeImage:(UIImage *)image toResolution:(int)resolution 
{
    NSData *imageData = UIImagePNGRepresentation(image);
    CGImageSourceRef src = CGImageSourceCreateWithData((__bridge    CFDataRef)imageData, NULL);
    CFDictionaryRef options = (__bridge CFDictionaryRef) @{
                                                           (id) kCGImageSourceCreateThumbnailWithTransform : @YES,
                                                           (id) kCGImageSourceCreateThumbnailFromImageAlways : @YES,
                                                           (id) kCGImageSourceThumbnailMaxPixelSize : @(resolution)
                                                           };
    CGImageRef thumbnail = CGImageSourceCreateThumbnailAtIndex(src, 0, options);
    CFRelease(src);
    UIImage *img = [[UIImage alloc]initWithCGImage:thumbnail];
    return img;
}

Этот метод принимает UIImage и разрешение в качестве аргументов и возвращает UIImage с требуемым разрешением.

Например: если вы хотите преобразовать изображение с разрешением 1024x1024 в 240x240, передайте 1024x1024 UIImage в аргументе 1 и 240 в аргументе 2. Взамен вы получаете 240x240 UIImage (или любой другой размер миниатюры).

0 голосов
/ 11 апреля 2011

Вы вызываете alloc init на myThumbNail где-нибудь?Похоже, вы либо не выделили память для нее в первую очередь, либо вы освободили ее там, где ее не должно быть.

...