【问题标题】:Converting the drawn view into UIImage and add to UIImageView in iphone [duplicate]将绘制的视图转换为 UIImage 并添加到 iPhone 中的 UIImageView [重复]
【发布时间】:2013-05-10 22:49:21
【问题描述】:

我有一个应用程序,我正在用手指做签名,它工作正常,它画线,但我想将这些线绘制的签名保存为 ImageView 中的图像以显示屏幕,但它没有显示我正在使用以下代码。

-(void)onSignButtonClick
{

    signatureView=[[UIView alloc] initWithFrame:CGRectMake(100,100,800,500)];

    signatureView.backgroundColor=[UIColor blackColor];

    [self.view addSubview:signatureView];

    UIButton*OkButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [OkButton setFrame:CGRectMake(100,420,200,40)];
    [OkButton setTitle:@"OK" forState:UIControlStateNormal];
    [OkButton addTarget:self action:@selector(onOKButtonClick) forControlEvents:UIControlEventTouchUpInside];
    [signatureView addSubview:OkButton];

    drawScreen=[[MyLineDrawingView alloc]initWithFrame:CGRectMake(10,10,700,400)];
    [signatureView addSubview:drawScreen];
    [drawScreen release];
}


- (UIImage *)captureView {

    //hide controls if needed
        CGRect rect = [signatureView bounds];//use your signature view's Rect means Frame;
        UIGraphicsBeginImageContext(rect.size);
        CGContextRef context = UIGraphicsGetCurrentContext();
        [self.view.layer renderInContext:context];   
        UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        return img;
}

-(void)onOKButtonClick{


    signatureView.hidden=YES;

    [self captureView];

      logoImageView.image=signatureImage;
}

【问题讨论】:

  • [self captureView];是返回 UIImage.. 你从哪里得到那个 UIImage?
  • 我从网站上得到了这个代码,我想我们需要得到返回的图像,你能帮我解决这个问题吗
  • 使用 logoImageView.image = [self captureView];
  • 它正在保存图像,但它没有保存我在 signatureView 中绘制的线条它正在显示整个视图
  • 使用:[self captureView]; signatureView.hidden=YES; logoImageView.image=signatureImage;

标签: iphone ios ipad uiview uiimageview


【解决方案1】:

试试这个:

-(void)onOKButtonClick {
    //first capture image from view
    CGRect rect = [signatureView bounds];   //use your signature view's Rect means Frame;

    UIGraphicsBeginImageContext(rect.size);
    CGContextRef context = UIGraphicsGetCurrentContext();
    [signatureView.layer renderInContext:context];   //this line is also important for you
    UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    //take some part of image (crop image)
    UIImage *imgFinal = [self cropImage:img rect:CGRectMake(100,100,300,300)];
    logoImageView.image = imgFinal;

    signatureView.hidden=YES;
}

-(UIImage *)cropImage:(UIImage *)image rect:(CGRect)cropRect {
   CGImageRef imageRef = CGImageCreateWithImageInRect([image CGImage], cropRect);
   UIImage *img = [UIImage imageWithCGImage:imageRef]; 
   CGImageRelease(imageRef);
   return img;
}

出现问题是因为您的 captureView 方法在定义中返回 UIImage 但您无法将其存储在方法调用中......

【讨论】:

  • 这工作正常,但如果视图为 500*500 但签名在 300*300 上完成,我可能只捕获视图平均值,那么它应该只捕获 300*300 然后保存它作为图像
  • 或者我可以缩小图像视图的大小,以便它适合那个beacuaue它就像一个签名并将被放置在文档上
  • 查看我为您的问题解决方案编辑的答案......
  • 我希望我的图像应该与 logoImageView 的大小相同,根据您的代码图像正在切割
  • 设置 logoImageView.contentMode = UIViewContentModeScaleToFill; 这个属性....
【解决方案2】:

在您的方法 captureView 中使用它。这对我有用

**UIGraphicsBeginImageContext(tempV.frame.size);
 [[tempV layer] renderInContext:UIGraphicsGetCurrentContext()];
 UIImage *screenshot = UIGraphicsGetImageFromCurrentImageContext();
 UIGraphicsEndImageContext();**

也像这样改变你的功能

-(void)onOKButtonClick{
signatureView.hidden=YEs;

    logoImageView.image=[self captureView];

}

【讨论】:

    【解决方案3】:

    更换你的

    logoImageView.image=signatureImage;
    

    logoImageView.image = [self captureView];
    

    编辑

    然后替换

    [self.view.layer renderInContext:context];
    

    在您的 captureView 方法中使用:

    [self.signatureView.layer renderInContext:context]; 
    

    【讨论】:

    • 我已经这样做了,但它保存了主视图而不是我在其中添加绘图的签名视图,如代码中给出的
    • 请检查我的新编辑
    猜你喜欢
    • 1970-01-01
    • 2012-07-15
    • 1970-01-01
    • 1970-01-01
    • 2010-11-19
    • 2012-05-30
    • 2019-08-07
    • 2016-07-09
    • 1970-01-01
    相关资源
    最近更新 更多