iphone - iphone iOS: 2步圖像處理與 CoreGraphics

  显示原文与译文双语对照的内容
66 1

我正在使用 CoreGraphics ( 在我的三維方法里) 對圖像( 透明 png ) 應用混合模式,然後調整結果的alpha值。我認為這需要用兩個步驟來完成,但我可能錯了。以下是我目前所擁有的( 哪一個工作正常):

CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSaveGState(context);
//SET COLOR - EDIT... added a more practical color example
CGContextSetRGBFillColor(context, 0.0, 1.0, 0.0, 1);
//flips drawing context (apparently this is necessary)
CGContextTranslateCTM(context, 0.0, self.bounds.size.height);
CGContextScaleCTM(context, 1.0, -1.0);//flip context
//DRAW PIN IMAGE
UIImage *pin = [UIImage imageNamed:@"pin"];
CGRect pinrect = CGRectMake(12, 17, 25, 25); 
CGContextDrawImage(context, pinrect, pin.CGImage);//draws image in context
//Apply blend mode
CGContextSetBlendMode(context, kCGBlendModeColor); 
CGContextClipToMask(context, pinrect, pin.CGImage);//restricts drawing to within alpha channel
//fills context with mask, applying blend mode
CGContextFillRect(context, pinrect); 
CGContextRestoreGState(context);
//-- Do something here to make result 50% transparent?? --

我想我需要把所有這些都畫成某種單獨的上下文,調用 CGContextSetAlpha(...),然後再回到原始上下文。在最後一個CGContextFillRect之前設置alpha將改變應用混合模式的數量,而不是整個圖像的alpha 。

編輯:已經發布的屏幕截圖

enter image description here

先謝謝了。

时间:原作者:0个回答

107 1

你可以使用透明層將混合應用到在 100%繪製的圖像,並在 50%處顯示結果。結果如下所示:
Image showing output我使用了紋理背景,以便你可以以清楚地看到下面的圖像 50%透明,而不僅僅是另一個圖像。下面是代碼:

CGContextRef context = UIGraphicsGetCurrentContext();
CGContextTranslateCTM(context, 0.0, self.bounds.size.height);
CGContextScaleCTM(context, 1.0, -1.0);//flip context
CGRect fullImageRect = (CGRect){42,57,100,100};
CGRect transparentImageRect = (CGRect){12,17,100,100};
CGContextSetRGBFillColor(context, 0.0, 1.0, 0.0, 1);
//Draw image at 100%
UIImage *testImage = [UIImage imageNamed:@"TestImage"];
CGContextDrawImage(context,fullImageRect,testImage.CGImage);
//Set 50% transparency and begin a transparency layer. Inside the transparency layer, the alpha is automatically reset to 1.0
CGContextSetAlpha(context,0.5);
CGContextBeginTransparencyLayer(context, NULL);
//Draw the image. It is viewed at 100% within the transparency layer and 50% outside the transparency layer.
CGContextDrawImage(context, transparentImageRect, testImage.CGImage);
//Draw blend on top of image
CGContextClipToMask(context, transparentImageRect, testImage.CGImage);
CGContextSetBlendMode(context, kCGBlendModeColor);
CGContextFillRect(context, transparentImageRect);
//Exit transparency layer, causing the image and blend to be composited at 50%.
CGContextEndTransparencyLayer(context);

編輯:舊內容佔用大量空間,但沒有幫助。如果你想看的話,看看修訂歷史。

原作者:
...