绘制保存在我们应用中的图像

时间:2016-03-31 07:32:26

标签: iphone cocoa-touch camera

我正在绘画。并且在相机卷中保存该图像,当我保存该图像时,图像alpha未正确设置。如果我在具有80%alpha的图像上绘制,然后单击保存图像将以40%(大约)alpha保存。我没有使用任何lib。我正在使用触摸绘图。

Image before saving with draw

Image after saving with draw

代码是

(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{


    UITouch *touch = [[event allTouches] anyObject];
    currentPoint = [touch locationInView:self.tempimage];
    UIGraphicsBeginImageContext(self.tempimage.frame.size);

    [tempimage.image drawInRect:CGRectMake(0, 0, self.tempimage.frame.size.width, self.tempimage.frame.size.height)];

    CGContextMoveToPoint(UIGraphicsGetCurrentContext(), currentPoint.x, currentPoint.y);

    CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y);

    strpoint=NSStringFromCGPoint(currentPoint);
    strpoint1=NSStringFromCGPoint(lastPoint);

    CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);
    CGContextRef context = UIGraphicsGetCurrentContext();


    if ([linewidth isEqualToString:@"40"])
    {
        CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 40.0);
        lineWidth=40.0;
    }
    if ([linewidth isEqualToString:@"30"])
    {
        CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 15.0);
        lineWidth=15.0;
    }
    if ([linewidth isEqualToString:@"20"])
    {
        CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 5.0);
        lineWidth=5.0;
    }

    if  ([streraser isEqualToString:@"eraser"])
    {
        CGContextSetBlendMode(UIGraphicsGetCurrentContext(), kCGBlendModeClear);
        CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);
        CGContextSetLineWidth(UIGraphicsGetCurrentContext(), lineWidth);
        CGContextBeginPath(UIGraphicsGetCurrentContext());
        CGContextSetBlendMode(UIGraphicsGetCurrentContext(), kCGBlendModeClear);
        CGContextMoveToPoint(UIGraphicsGetCurrentContext(), currentPoint.x, currentPoint.y);
        CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y);
        CGContextStrokePath(UIGraphicsGetCurrentContext());
    }
    /*CGContextSetAlpha(context,opacity);
        CGContextSetStrokeColorWithColor(context,newcolor.CGColor);

//    CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), self->red, self->green, self->blue, self->opacity);
        CGContextSetBlendMode(UIGraphicsGetCurrentContext(),blendmode);*/
//    [self.view.layer renderInContext:context];


-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [[event allTouches] anyObject];
    lastPoint=[touch locationInView:tempimage];

NSLog(@"Touch starting point = x : %f Touch Starting Point = y : %f", 

lastPoint.x, lastPoint.y);
    myPath=[[UIBezierPath alloc]init];
    myPath.lineWidth=self.lineWidth;
    myPath.lineCapStyle = kCGLineCapRound;
 redoIndex =0;
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
 UIGraphicsBeginImageContext(self.tempimage.bounds.size);
[self.tempimage.layer renderInContext:UIGraphicsGetCurrentContext()];
rawImage = UIGraphicsGetImageFromCurrentImageContext();
[tempimage setAlpha:self.lineAlpha];
 UIGraphicsEndImageContext();
#if PUSHTOFILE
   lineIndex++;
    [self performSelectorInBackground:@selector(writeFilesBG)
                           withObject:nil];
#else
    NSDictionary *lineInfo = [NSDictionary dictionaryWithObjectsAndKeys:rawImage, @"IMAGE",nil];
    [pointsArray addObject:lineInfo];
    UIBezierPath *_path=[pointsArray lastObject];
    [_stack addObject:_path];
    [pointsArray removeLastObject];
    [self.tempimage setNeedsDisplay];
#endif

}

- (IBAction)btnsave:(id)sender
{
    UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@""
                                                             delegate:self
                                                    cancelButtonTitle:nil
                                               destructiveButtonTitle:nil
                                                    otherButtonTitles:Save_Folder_Name,@"Cancel", nil];
    [actionSheet showInView:self.view];

}
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
    if (buttonIndex == 0)
    {
        UIGraphicsBeginImageContextWithOptions(self.tempimage.bounds.size, NO, 0.0);
//        [self.tempimage.image drawInRect:CGRectMake(0, 0, self.tempimage.frame.size.width, self.tempimage.frame.size.height)];
        [self.tempimage.image drawInRect:CGRectMake(0, 0, tempimage.frame.size.width, tempimage.frame.size.height) blendMode:blendmode alpha:lineAlpha];
        UIImage *SaveImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        UIImageWriteToSavedPhotosAlbum(SaveImage, self,@selector(image:didFinishSavingWithError:contextInfo:), nil);
    }
}
- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo
{
    // Was there an error?
    if (error != NULL)
    {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Image could not be saved.Please try again"  delegate:nil cancelButtonTitle:nil otherButtonTitles:@"Close", nil];
        [alert show];
    } else {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Success" message:@"Image was successfully saved in photoalbum"  delegate:nil cancelButtonTitle:nil otherButtonTitles:@"Close", nil];
        [alert show];
    }
}

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

我使用了两个图像视图,一个使用了tempimage,另一个使用了imageview,我只在tempimage中设置了alpha,但是在两个图像视图中都设置了alpha然后我的问题解决了 分别称为imageview(alpha为1.0)和tempimage(alpha为0.5),我可以像这样保存快照:

mozFullPath