5

I am Drawing in image. And Save That Image in camera roll, when i save that image then image alpha not set properly. if i draw on image with 80% alpha and then click save image will save with 40%(approx) alpha. i am not using any lib for this. i am drawing using touch.

Image before saving with draw

Image after saving with draw

code is

(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];
    }
}

any help would be appreciated.

Rajesh
  • 624
  • 13
  • 20
  • that above attached code for drawing not for saving image: i think you did mistake at save image code to set scale check http://stackoverflow.com/questions/5084845/how-to-set-the-opacity-alpha-of-a-uiimage – Nitin Gohel Mar 31 '16 at 10:01

1 Answers1

0

i have two image view are used, one with the tempimage and one with the imageview, i have alpha only set in tempimage but alpha in both image view are set then my problem solve called imageview (with alpha of 1.0) and tempimage (with alpha of 0.5), respectively, I can save the snapshot like so:

- (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);
}
Rajesh
  • 624
  • 13
  • 20