2012-01-18 38 views
0

我的应用程序从iPhone或相机的库中拍摄照片。然后有一个开关控制将其转换为B照片。在iPhone上将彩色照片转换为黑白应用程序

当我做开关控制时,它什么都不做。

我找不出我的代码有什么问题。我看过StackOverflow上的其他例子,但无法让我的工作。任何人都看到明显的东西?

这是我的头文件,下面是我的实现文件。

// 
// 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 

实现文件:

// 
// 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

实际上你是否已将交换机连接到界面构建器中的任何东西?像ValueChanged控件事件?我在代码中看不到这样的功能。 – 2012-01-18 05:07:13

+0

是的,我做到了。我只是不知道如何实现这个代码; - (UIImage *)convertImageToGrayScale:(UIImage *)image {你知道如何帮助我完成这件事。我真的需要帮助 – 2012-01-18 18:34:24

回答

0

假设你的函数的实际工作,你需要在这里称之为:

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

,然后显示chosenImage。

相关问题