2010-08-26 83 views
1

我正在使用CGImageCreateWithImageInRect做一個放大效果,它的作品非常漂亮,除非我接近我的視圖的邊緣。在這種情況下,裁剪會導致圖像失真。現在我抓住一個72x72的視圖塊,在它上面應用一個圓形遮罩,然後繪製遮罩的圖像,並在頂部畫一個圓圈。CGImageCreateWithImageInRect導致失真

當複製的塊靠近視圖的邊緣時,由於剪裁,它會小於72x72,然後當它在放大鏡中繪製時會被拉伸。

例如,當觸摸點靠近左邊緣時,我想要創建一個圖像,其中左側部分用純色填充,右半部分包含正在放大的部分視圖。然後將遮罩應用於該圖像並在頂部添加遮罩。

這是我現在正在做的。 imageRef是被放大的圖像,mask是一個圓形的遮罩,overlay是一個圓形來標記放大區域的邊緣。

CGImageRef subImage = CGImageCreateWithImageInRect(imageRef, CGRectMake(touchPoint.x - 36, touchPoint.y - 36, 72, 72)); 
CGImageRef xMaskedImage = CGImageCreateWithMask(subImage, mask); 

CGContextRef context = UIGraphicsGetCurrentContext(); 
CGAffineTransform xform = CGAffineTransformMake(1.0, 0.0, 0.0, -1.0, 0.0, 0.0); 
CGContextConcatCTM(context, xform); 

CGRect area = CGRectMake(touchPoint.x - 84, -touchPoint.y, 170, 170); 
CGRect area2 = CGRectMake(touchPoint.x - 80, -touchPoint.y + 4, 160, 160); 
CGContextDrawImage(context, area2, xMaskedImage); 
CGContextDrawImage(context, area, overlay); 

回答

0

我解決了這個問題,使用CGBitmapContextCreate()來創建一個位圖上下文。然後,我將捕獲區域繪製到此上下文的較小區域,並使用CGBitmapContextCreateImage()從它創建一個圖像。這是謎題中缺失的一部分。

+0

我也面臨同樣的問題,能否詳細解釋一下這個。 – 2014-09-05 10:21:56

相關問題