2012-03-05 63 views
1

我用下面的代码捕捉CGRect。但由此产生的图像不是我想要的图像。图像有一些透明的背景。如何建议删除透明背景图片enter image description here捕获CGRect不会提供正确的图像。该怎么办?

- (UIImage *)captureScreenInRect:(CGRect)captureFrame { 

     CALayer *layer; 
     layer = imageScrollview.layer; 
     UIGraphicsBeginImageContext(imageScrollview.bounds.size); 
     CGContextClipToRect (UIGraphicsGetCurrentContext(),captureFrame); 
     \[layer renderInContext:UIGraphicsGetCurrentContext()\]; 
     UIImage *screenImage = UIGraphicsGetImageFromCurrentImageContext(); 
     UIGraphicsEndImageContext(); 
     return screenImage; 

    } 

回答

0

翻译的情况下,这样它的起源符合您captureFrame

UIGraphicsBeginImageContext(imageScrollview.bounds.size); 
CGContextRef c = UIGraphicsGetCurrentContext(); 
CGContextTranslateCTM(c, -captureFrame.origin.x, -captureFrame.origin.y); 
[imageScrollView.layer renderInContext:c]; 
UIImage *screenImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

(根据记忆而写,未经测试)

此外剪裁的图片已经被截断的情况下是没有必要的图像上下文的边界。

+0

仍然没有捕捉正确。我想我正在做错误的滚动视图或上下文。感谢omz的回复。 – DipakSonara 2012-03-06 05:43:43

-1

试试这个

CGRect cropRect = CGRectMake(imageScrollview.frame.origin.x+15, imageScrollview.frame.origin.y+15, WIDTH, HEIGHT); 
+1

谢谢帕拉斯:) – DipakSonara 2012-03-09 11:20:19

+0

你是认真的吗?你应该首先了解为什么有15个像素的空间,而不是把它们劈开。该图像可能不在图像视图的左上角,从而导致您捕获其周围的额外空间。下次你在其他地方使用这个代码时,你会得到完全不正确的结果。 – 2012-03-09 11:28:42

+0

其实我有同样的问题,并修复这个黑客,所以只需将其粘贴在这里,并可能其固定的DipakSonara的问题..lets看到... – 2012-03-09 11:32:53

相关问题