我正在绘画。并且在相机卷中保存该图像,当我保存该图像时,图像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
}
- (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];
}
}
任何帮助将不胜感激。
答案 0 :(得分:0)
我使用了两个图像视图,一个使用了tempimage,另一个使用了imageview,我只在tempimage中设置了alpha,但是在两个图像视图中都设置了alpha然后我的问题解决了 分别称为imageview(alpha为1.0)和tempimage(alpha为0.5),我可以像这样保存快照:
mozFullPath