2012-01-18 1 views
0

Mon application prend une photo de la bibliothèque de l'iPhone ou de l'appareil photo. Ensuite, il y a un contrôle de commutateur pour le convertir en une photo B & W.Conversion de photo couleur en N & B sur iPhone App

Lorsque je fais le contrôle du commutateur, il ne fait rien.

Je ne pouvais pas comprendre ce qui ne va pas avec mon code. J'ai regardé d'autres exemples sur StackOverflow mais je n'ai pas réussi à faire fonctionner le mien. Quelqu'un voit quelque chose d'évident?

Voici mon fichier d'en-tête et ci-dessous est mon fichier d'implémentation.

// 
// ErdalKulguProjectViewController.h 
// ErdalKulguProject 
// 
// Created by Kulgu, Erdal on 1/17/12. 
// Copyright 2012 __MyCompanyName__. All rights reserved. 
// 

#import <UIKit/UIKit.h> 
#import <MediaPlayer/MediaPlayer.h> 

@interface ErdalKulguProjectViewController : UIViewController <MPMediaPickerControllerDelegate, UIImagePickerControllerDelegate,UINavigationControllerDelegate> { 
    IBOutlet UIImageView *chosenImage; 
    IBOutlet UISwitch *toggleCamera; 
    IBOutlet UISwitch *toggleBlackWhite; 


} 

-(IBAction)chooseImage:(id)sender; 
- (UIImage *)convertImageToGrayScale:(UIImage *)image; 

@property (nonatomic, retain) UIImageView *chosenImage; 
@property (nonatomic,retain) UISwitch *toggleCamera; 
@property (nonatomic,retain) UISwitch *toggleBlackWhite; 



@end 

mise en œuvre du fichier:

// 
// ErdalKulguProjectViewController.m 
// ErdalKulguProject 
// 
// Created by Kulgu, Erdal on 1/17/12. 
// Copyright 2012 __MyCompanyName__. All rights reserved. 
// 

#import "ErdalKulguProjectViewController.h" 

@implementation ErdalKulguProjectViewController 

@synthesize chosenImage; 
@synthesize toggleCamera; 
@synthesize toggleBlackWhite; 
//@synthesize grayScale; 


-(IBAction)chooseImage:(id)sender { 
    UIImagePickerController *imagePicker; 
    imagePicker = [[UIImagePickerController alloc] init]; 



    if ([toggleCamera isOn]) { 
     imagePicker.sourceType=UIImagePickerControllerSourceTypeCamera; 
    } else { 
     imagePicker.sourceType=UIImagePickerControllerSourceTypePhotoLibrary; 

    } 
    imagePicker.delegate=self; 
    [[UIApplication sharedApplication] setStatusBarHidden:YES]; 
    [self presentModalViewController:imagePicker animated:YES]; 
    [imagePicker release]; 
} 

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { 
    [[UIApplication sharedApplication] setStatusBarHidden:NO]; 
    [self dismissModalViewControllerAnimated:YES]; 
    chosenImage.image=[info objectForKey: UIImagePickerControllerOriginalImage]; 



} 

- (void)imagePickerControllerDidCancel: (UIImagePickerController *)picker { 
    [[UIApplication sharedApplication] setStatusBarHidden:NO]; 
    [self dismissModalViewControllerAnimated:YES]; 
} 





- (UIImage *)convertImageToGrayScale:(UIImage *)image 
{ 
    // Create image rectangle with current image width/height 
    CGRect imageRect = CGRectMake(0, 0, image.size.width, image.size.height); 


    if ([toggleBlackWhite isOn]) { 


    } else { 


    } 


    // Grayscale color space 
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray(); 

    // Create bitmap content with current image size and grayscale colorspace 
    CGContextRef context = CGBitmapContextCreate(nil, image.size.width, image.size.height, 8, 0, colorSpace, kCGImageAlphaNone); 

    // Draw image into current context, with specified rectangle 
    // using previously defined context (with grayscale colorspace) 
    CGContextDrawImage(context, imageRect, [image CGImage]); 

    // Create bitmap image info from pixel data in current context 
    CGImageRef imageRef = CGBitmapContextCreateImage(context); 

    // Create a new UIImage object 
    UIImage *newImage = [UIImage imageWithCGImage:imageRef]; 

    // Release colorspace, context and bitmap information 
    CGColorSpaceRelease(colorSpace); 
    CGContextRelease(context); 
    CFRelease(imageRef); 

    // Return the new grayscale image 
    return newImage; 
} 





/* 
// The designated initializer. Override to perform setup that is required before the view is loaded. 
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
    } 
    return self; 
} 
*/ 

/* 
// Implement loadView to create a view hierarchy programmatically, without using a nib. 
- (void)loadView { 
} 
*/ 


/* 
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib. 
- (void)viewDidLoad { 
    [super viewDidLoad]; 
} 
*/ 


/* 
// Override to allow orientations other than the default portrait orientation. 
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    // Return YES for supported orientations 
    return (interfaceOrientation == UIInterfaceOrientationPortrait); 
} 
*/ 

- (void)didReceiveMemoryWarning { 
    // Releases the view if it doesn't have a superview. 
    [super didReceiveMemoryWarning]; 

    // Release any cached data, images, etc that aren't in use. 
} 

- (void)viewDidUnload { 
    // Release any retained subviews of the main view. 
    // e.g. self.myOutlet = nil; 
} 


- (void)dealloc { 
    [chosenImage release]; 
    [toggleCamera release]; 
    [toggleBlackWhite release]; 
    [super dealloc]; 
} 

@end 
+0

avez-vous réellement connecté le commutateur à quoi que ce soit dans le constructeur d'interface? comme événement de contrôle ValueChanged? Je ne vois pas une telle fonction dans votre code. –

+0

oui, je l'ai fait. Je ne sais pas comment implémenter ce code; - (UIImage *) convertImageToGrayScale: (UIImage *) image {savez-vous comment m'aider à traverser ça. j'ai vraiment besoin d'aide –

Répondre

0

En supposant que votre fonction fonctionne réellement, vous devez appeler ici:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { 
    [[UIApplication sharedApplication] setStatusBarHidden:NO]; 
    [self dismissModalViewControllerAnimated:YES]; 
    chosenImage.image=[info objectForKey: UIImagePickerControllerOriginalImage]; 

    //adjust the image if switch is toggled 
    if ([toggleBlackWhite isOn]) chosenImage = [self convertImageToGrayScale:chosenImage]; 
} 

Et puis afficher la chosenImage.