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

Raj*_*esh 5 iphone camera cocoa-touch

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

用绘图保存前的图像

用绘图保存后的图像

代码是

(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
Run Code Online (Sandbox Code Playgroud)

}

- (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];
    }
}
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激.

Raj*_*esh 0

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

- (void)saveSnapshot {
CGRect rect = self.tempimage.bounds;

    UIGraphicsBeginImageContextWithOptions(rect.size, NO, 0);
    if ([self.tempimage respondsToSelector:@selector(drawViewHierarchyInRect:afterScreenUpdates:)]) {
        [self.imageview drawViewHierarchyInRect:rect afterScreenUpdates:YES]; // iOS7+
        [self.tempimage drawViewHierarchyInRect:rect afterScreenUpdates:YES];
    } else {
        [self.imageview.layer renderInContext:UIGraphicsGetCurrentContext()]; // pre iOS7
        [self.tempimage.layer renderInContext:UIGraphicsGetCurrentContext()];
    }
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);
}
Run Code Online (Sandbox Code Playgroud)