我对这种编码很陌生,但已经学到了相当多的知识,不幸的是,我正在开发的一个应用程序遇到了挫折。
我正试图创建一个相机应用程序,将允许用户采取“之前”的图像,然后采取“之后”的图像,然后我想为图像的选项放在一起(左和右),并保存为一个图像。
到目前为止,我已经成功地编写了应用程序,以便使用下面的代码拍摄一张照片:
标题:
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController <UIImagePickerControllerDelegate, UINavigationControllerDelegate>
@property (strong, nonatomic) IBOutlet UIImageView *beforeImage;
- (IBAction)cameraBeforeImage:(UIButton *)sender;
- (IBAction)libraryBeforeImage:(UIButton *)sender;
- (IBAction)deleteBeforeImage:(UIButton *)sender;
@property (strong, nonatomic) IBOutlet UIImageView *afterImage;
- (IBAction)cameraAfterImage:(UIButton *)sender;
- (IBAction)libraryAfterImage:(UIButton *)sender;
- (IBAction)deleteAfterImage:(UIButton *)sender;
- (IBAction)saveImages:(UIButton *)sender;
@end
实施:
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (IBAction)cameraBeforeImage:(UIButton *)sender {
if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
UIAlertView *myAlertView = [[UIAlertView alloc] initWithTitle:@"Oops!"
message:@"This Device Has No Camera, Please Select An Image From Your Library."
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles: nil];
[myAlertView show];
}else{
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
picker.allowsEditing = YES;
picker.sourceType = UIImagePickerControllerSourceTypeCamera;
[self presentViewController:picker animated:YES completion:NULL];
}
}
- (IBAction)libraryBeforeImage:(UIButton *)sender {
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
picker.allowsEditing = YES;
picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
[self presentViewController:picker animated:YES completion:NULL];
}
- (IBAction)deleteAfterImage:(UIButton *)sender {
}
- (IBAction)saveImages:(UIButton *)sender {
}
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
UIImage *chosenImage = info[UIImagePickerControllerEditedImage];
self.beforeImage.image = chosenImage;
[picker dismissViewControllerAnimated:YES completion:NULL];
}
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {
[picker dismissViewControllerAnimated:YES completion:NULL];
}
- (IBAction)deleteBeforeImage:(UIButton *)sender {
}
- (IBAction)cameraAfterImage:(UIButton *)sender {
}
- (IBAction)libraryAfterImage:(UIButton *)sender {
}
- (IBAction)saveImages:(UIButton *)sender {
}
@end
以下是我需要添加的内容列表:
- 在“After”按钮中添加与“Before”相同的功能,但要将图像存储在“afterImage”图像视图中。
- 在“saveImages”按钮中添加功能,将两张拍摄的图像保存为一张拼接在一起的图像。
1条答案
按热度按时间vsnjm48y1#
1 .第一个问题,我猜你的问题是“你怎么知道哪张照片是拍的,在哪里显示”?
答案1:创建两个UIImagePickerControllers作为属性。一旦
imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
返回一个镜像,你可以简单地检查它是哪个控制器if( picker == afterPictureController){...
。答案2:创建一个标志,指示下一张拍摄的照片是之前的还是之后的。它不是很灵活,但它工作。
2 .拼接两张图片时,可以创建大小为(image1Width+image2Width,MAX(image1Height,image2Height))的UIGraphicsBeginImageContext,使用该上下文绘制图片。之后,您可以通过调用
UIGraphicsGetImageFromCurrentImageContext();
从上下文中获取拼接图像