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)
任何帮助,将不胜感激.
我使用了两个图像视图,一个带有 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)
| 归档时间: |
|
| 查看次数: |
118 次 |
| 最近记录: |