2012-01-18 82 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。

相關問題