【问题标题】:iOS Combining images to Parse.comiOS 将图像组合到 Parse.com
【发布时间】:2014-12-11 15:52:03
【问题描述】:

我想组合两张图像并将它们作为一张发送到 Parse 数据库。 结果只有我没有得到任何图像。

这是我的代码: .h 文件

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


@interface mailViewController : UIViewController<UITextFieldDelegate>

@property (weak, nonatomic) IBOutlet UITextField *naamText;
@property (weak, nonatomic) IBOutlet UITextField *emailText;
@property (weak, nonatomic) IBOutlet UIImageView *dankView;
@property (weak, nonatomic) IBOutlet UILabel *label;
@property (weak, nonatomic) IBOutlet UIButton *buttonLogo;
@property (weak, nonatomic) IBOutlet UIImageView *mailImage;
@property (weak, nonatomic) IBOutlet UIImageView *achtergrondImage;
@property (weak, nonatomic) IBOutlet UIImageView *imageView;

@property (nonatomic, strong) UIImage *coverImage;
@property (nonatomic, strong) UIImage *achtergrond;
//@property (nonatomic, strong) UIImage *finalImage;

 - (IBAction)send:(id)sender;
 - (IBAction)cancel:(id)sender;

 @end

.m 文件

  #import "mailViewController.h"
  #import "cat01ViewController.h"

@interface mailViewController ()

@property (nonatomic, strong) UIImage *finalImage;

@end

@implementation mailViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

   - (void)viewDidLoad
    {

    self.naamText.delegate = self;
    self.emailText.delegate = self;

    self.mailImage.image = self.coverImage;


    //hide dankwoord
    self.dankView.hidden = YES;
    _label.hidden = YES;
    _buttonLogo.hidden = YES;


    [super viewDidLoad];


}

- (void) viewWillAppear:(BOOL)animated
{
      if (self.coverImage != nil)
        self.mailImage.image = self.coverImage;
}

- (void)addImages{

    UIImage *image1 = self.mailImage.image;
    UIImage *image2 = self.achtergrond;

    CGSize size = CGSizeMake(image1.size.width, image1.size.height + image2.size.height);

    [image1 drawInRect:CGRectMake(0,0,size.width, image1.size.height)];
    [image2 drawInRect:CGRectMake(0,image1.size.height,size.width, image2.size.height)];

    self.finalImage = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    //Add image to view
    UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0,               self.finalImage.size.width, self.finalImage.size.height)];
    imageView.image = self.finalImage;
    [self.view addSubview: imageView];

}

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{

    [self.naamText resignFirstResponder];
    [self.emailText resignFirstResponder];
}

-(BOOL)textFieldShouldReturn:(UITextField *)textField{

   if (textField) {
        [textField resignFirstResponder];
    }

    PFObject *emailadres = [PFObject objectWithClassName:@"emailadres"];
    [emailadres setObject:_naamText.text forKey:@"name"];
    [emailadres setObject:_emailText.text forKey:@"email"];
    emailadres[@"iPad_nr"] = @"iPad 2";
    [emailadres saveInBackground];

    self.dankView.hidden = NO;
    _label.hidden = NO;
    _buttonLogo.hidden = NO;


    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 5 * NSEC_PER_SEC),   dispatch_get_main_queue(), ^{
       _label.hidden = YES;
    });

    return NO;
}

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

- (IBAction)send:(id)sender {

    [self.naamText resignFirstResponder];
    [self.emailText resignFirstResponder];

    UIImage *image = self.finalImage;

    NSData *imageData = UIImagePNGRepresentation(image);
    PFFile *imageFile = [PFFile fileWithName:@"image.png" data:imageData];

    PFObject *mailPhoto = [PFObject objectWithClassName:@"mailPhoto"];
    mailPhoto[@"imageName"] = @"Ikzieikzie";
    mailPhoto[@"imageFile"] = imageFile;
    [mailPhoto setObject:_naamText.text forKey:@"name"];
    [mailPhoto setObject:_emailText.text forKey:@"email"];
    mailPhoto[@"iPad_nr"] = @"iPad 1";
    [mailPhoto saveInBackground];

    self.dankView.hidden = NO;
    _label.hidden = NO;
    _buttonLogo.hidden = NO;


    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 5 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
        _label.hidden = YES;
    });

}

- (IBAction)cancel:(id)sender {

    [self.naamText resignFirstResponder];
    [self.emailText resignFirstResponder];

    self.dankView.hidden = NO;
    _label.hidden = NO;
    _buttonLogo.hidden = NO;


    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 5 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
        _label.hidden = YES;
    });

}

@end

所以,我知道如何将图像单独发送到 Parse 数据库......但我不明白如何将它们组合起来并将它们作为一个发送。

【问题讨论】:

  • 您永远不会设置 self.finalImage(如在类实例变量中)来包含组合图像。

标签: ios image blend


【解决方案1】:

你在addImages中设置了局部变量finalImage,你从来没有设置类变量self.finalImage来包含组合图像,所以这一行

UIImage *image = self.finalImage;

可能将 image 设置为 nil。

此外,您永远不会按照您的预期将UIImageView *imageView 添加为addImages 中的子视图。

因此,要修复此代码,我建议在类的顶部创建将 finalImage 定义为类属性,例如:

@interface ViewController ()

@property (nonatomic, strong) UIImage *finalImage;

@end

然后在addImages 中,您可以将局部变量finalImage 更改为self.finalImage 并正确添加UIImageView 作为子视图,例如:

self.finalImage = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

//Add image to view
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, self.finalImage.size.width, self.finalImage.size.height)];
imageView.image = self.finalImage;
[self.view addSubview: imageView];

进行这些更改后,您仍然可以在send: 中使用此行:

UIImage *image = self.finalImage; 

【讨论】:

  • 我试过这个,但它不起作用。什么 di 用于发送解析? UIImage *image = self.finalImage;不行,所以呢?而是 self.finalImage 只有 finalImage?
  • 不,像我说的那样更新代码,然后在send: 中仍然使用UIImage *image = self.finalImage;
  • 这一行出现错误; UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, finalImage.size.width, finalImage.size.height)];它想改变它... _finalImage.size.. 等
  • 是的,因为我们应该将所有提到的finalImage 更改为self.finalImage,但我也忘了在那里进行更改。
  • 是的,试过了...仍然没有图像。它发送一个图像进行解析,但它仍然是空的。
【解决方案2】:

你放错了上下文,它应该专注于 imageview 对象而不是 image 对象。 试试这个:

UIImage *image1 = self.mailImage.image;
UIImage *image2 = self.achtergrond;

CGSize size = CGSizeMake(image1.size.width, image1.size.height + image2.size.height);

[image1 drawInRect:CGRectMake(0,0,size.width, image1.size.height)];
[image2 drawInRect:CGRectMake(0,image1.size.height,size.width, image2.size.height)];

UIImage *finalImage = UIGraphicsGetImageFromCurrentImageContext();

//Add image to view
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, finalImage.size.width, finalImage.size.height)];

UIGraphicsBeginImageContext(size);

imageView.image = finalImage;

UIGraphicsEndImageContext();

希望这会有所帮助。

【讨论】:

  • 谢谢,但是这里会报错; UIGraphicsBeginImageContext(CGRectMake(0, 0, finalImage.size.width, finalImage.size.height)); '通过 CGRect (aka struct)..'
【解决方案3】:

所以,这是最终的解决方案!感谢您的帮助!

UIImage *image1 = self.achtergrondImage.image;
UIImage *image2 = self.mailImage.image;

UIGraphicsBeginImageContext(image1.size);
[image1 drawInRect:CGRectMake(0, 0, image1.size.width, image1.size.height)];
[image2 drawInRect:CGRectMake(image1.size.width - image2.size.width, image1.size.height - image2.size.height, image2.size.width, image2.size.height)];

self.finalImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, self.finalImage.size.width, self.finalImage.size.height)];
imageView.image = self.finalImage;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-14
    • 1970-01-01
    • 1970-01-01
    • 2014-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多