2016-08-12 13 views
0

Я знаю, что при уменьшении изображения вы должны ожидать некоторую потерю качества, но когда я назначаю изображение UIButton с размером (75,75), он имеет отличное качество.Изображение теряет качество при масштабировании

Когда я масштабирую изображение до размера (75,75) для копирования/вставки с использованием UIPboardboard, у него действительно плохое качество.

фона: Мое приложение является расширение клавиатуры, поэтому у меня есть кнопки с присвоенными изображениями и когда они щелкают, я получаю изображение с помощью кнопки, масштабировать его, чтобы быть правильный размер, скопируйте его в UIPasteboard, то вставить.

Код:

Вот мой код для обнаружения нажатия кнопок и копирование изображения:

- (IBAction) clickedImage:(id)sender { 
    UIButton *btn = sender; 
    UIImage *scaledImage = btn.imageView.image; 
    UIImage *newImage = [scaledImage imageWithImage:scaledImage andSize:CGSizeMake(75, 75)]; 
    NSData *imgData = UIImagePNGRepresentation(newImage); 

    UIPasteboard *pasteboard = [UIPasteboard generalPasteboard]; 
    [pasteboard setData:imgData forPasteboardType:[UIPasteboardTypeListImage objectAtIndex:0]]; 
} 

И у меня есть категория UIImage с помощью метода imageWithImage:andSize: для масштабирования изображения. Это метод масштабирования:

- (UIImage*)imageWithImage:(UIImage*)image andSize:(CGSize)newSize { 
    // Create a bitmap context. 
    UIGraphicsBeginImageContextWithOptions(newSize, NO, image.scale); 
    [image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)]; 
    UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return newImage; 
} 

Что не имеет смысла в том, что, когда я положил изображение в UIButton он масштабируется до точного такого же размера, как когда я масштабироваться с помощью кода, но качество пути лучше для UIButton, чем когда я возвращаю масштабированное изображение. Что-то не так с моим кодом масштабирования? Кто-нибудь знает, почему происходит такое снижение качества между двумя изображениями?

+0

Вы извлекаете изображение с помощью кнопки. То же самое, если вы создаете новый 'UIImage' из ресурса? – Losiowaty

+0

@ Losiowaty да, я пробовал создать новый UIImage, и это то же самое –

+0

Являются ли эти изображения лучше представлены в виде векторной графики, а затем выводятся при любом масштабировании? –

ответ

0

Вы попробовали https://github.com/mbcharbonneau/UIImage-Categories?

Существует интересный метод в категории Изменить размер

- (UIImage *)resizedImage:(CGSize)newSize 
    interpolationQuality:(CGInterpolationQuality)quality; 

качество настройки для kCGInterpolationHigh, кажется, дает хороший результат (немного медленнее)

0

Лучший способ сделать это состоит в использовании ImageIO для изменения размеров изображений. Это занимает немного больше времени, но гораздо лучше масштабировать изображения, чем перерисовка в графический контекст.

 Смежные вопросы

  • Нет связанных вопросов^_^