2013-06-08 2 views
1

У меня есть простое приложение, где я могу сделать снимок или выбрать и существующую фотографию на рулоне камеры, а затем отобразить изображение в UIImageView. Я хочу иметь кнопку, которую вы можете нажать и инвертировать выбранное изображение, а затем отобразить это в кадре камеры. Мой вопрос: как инвертировать цвета UIImage, а затем использовать новую инвертированную для отображения в ImageView? Я видел другие сообщения, связанные с этим, но никто не объясняет, как реализовать код. Я довольно новичок в xcode и буду благодарен всем отзывам.iOS - инвертировать UIImage с помощью кнопки

Вот мой .m файл для контроллера представления:

#import "ViewController.h" 

@interface ViewController() 

@end 

@implementation ViewController 

@synthesize imageView; 
- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

-(IBAction)takePhoto { 
    picker1 = [[UIImagePickerController alloc] init]; 
    picker1.delegate = self; 
    [picker1 setSourceType:UIImagePickerControllerSourceTypeCamera]; 
    [self presentViewController:picker1 animated:YES completion:nil]; 

} 

-(IBAction)ChooseExisting { 

    picker2 = [[UIImagePickerController alloc] init]; 
    picker2.delegate = self; 
    [picker2 setSourceType:UIImagePickerControllerSourceTypePhotoLibrary]; 
    [self presentViewController:picker2 animated:YES completion:nil]; 

} 

-(IBAction)invertImage { 

} 

-(void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { 
    imageFinal = [info objectForKey:UIImagePickerControllerOriginalImage]; 
    [imageView setImage:imageFinal]; 
    [self dismissViewControllerAnimated:YES completion:nil]; 

} 

-(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker { 

    [self dismissViewControllerAnimated:YES completion:nil]; 
} 

@end 
+0

http://stackoverflow.com/questions/6672517/is-programmatically-inverting-the-colors-of-an-image-possible – thelaws

+0

Как реализовать этот код в моей ситуации? – Milo

+0

Его нужно поместить в другой файл, а затем использовать: 'self.imageView.image = [self.imageView.image negativeImage];' Идите читать о [категориях в объективе-c] (http://developer.apple. com/library/mac/# documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/CustomizingExistingClasses/CustomizingExistingClasses.html) – thelaws

ответ

9

Я вижу метод negetiveImage имеет много кода. Вот простой, используя фильтры Core Image.

Включите Core Image Framework в свой проект Импортируйте основной заголовок изображения.

#import <CoreImage/CoreImage.h> 

Код ниже должен вернуть вам инвертированное UIImage

UIImage *inputImage = [UIImage imageNamed:@"imageName"]; 
CIFilter* filter = [CIFilter filterWithName:@"CIColorInvert"]; 
[filter setDefaults]; 
[filter setValue:inputImage.CIImage forKey:@"inputImage"]; 
UIImage *outputImage = [[UIImage alloc] initWithCIImage:filter.outputImage]; 

outputImage будет перевернутой

+6

Совет: создайте CIImage с '[[CIImage alloc] initWithCGImage: inputImage.CGImage]' если 'inputImage.CIImage' не работает для вас; –

+0

Удивительный, лучший ответ на этот вопрос, который я нашел через Интернет! Благодаря! – hurshagrawal

-1

Чтобы дать вам простой ответ, вы можете инвертировать UIImageView, который имеет свой UIImage.

Чтобы инвертировать его, просто использовать

[yourImageView setTransform:CGAffineTransformMakeScale(-1, 1)]; // flip horizontally 
[yourImageView setTransform:CGAffineTransformMakeScale(1, -1)]; // flip vertically 
[yourImageView setTransform:CGAffineTransformMakeScale(-1, -1)]; // flip horizontally and vertically 

и вернуть его в нормальное русло, использовать

[yourImageView setTransform:CGAffineTransformIdentity]; // bring the view back to normal. 

Надеется, что это помогает, и я желаю вам всего наилучшего с вами приложением :)

+1

Вы прочитали вопрос? – deepflame

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