3
我想將r,g,b和兩個CGImages的值相乘,將單個圖像用作蒙版(在其Alpha通道中)和色調(在rgb通道中)。我第一次嘗試簡單:將RGBA與兩個CGImageRefs相乘
CGContextDrawImage(context, CGRectMake(0, 0, _w, _h), handle());
CGContextSetBlendMode(context, kCGBlendModeMultiply);
CGContextDrawImage(context, CGRectMake(0, 0, other->width(), other->height()), over);
但是,這只是色彩,並沒有掩蓋。因此,我提取從掩蔽圖像的阿爾法成CGImage掩模灰度圖像(使用CGDataProvider),並用於隨着所述上下文的掩模:
// "mask" is "other"'s alpha channel as an inverted grayscale image
CGContextSaveGState(context);
CGContextClipToMask(context, CGRectMake(0, 0, other->width(), other->height()), mask);
CGImageRelease(mask);
CGContextDrawImage(context, CGRectMake(0, 0, _w, _h), handle());
CGContextRestoreGState(context); // Don't apply the clip mask to 'other', since it already has it
CGContextSetBlendMode(context, kCGBlendModeMultiply);
CGContextDrawImage(context, CGRectMake(0, 0, other->width(), other->height()), other->handle());
它仍然看起來不正確,雖然。圖像獲得更輕;一個倍增的圖像應該總是至少較暗?在圖片預覽:提前啓蒙:)
http://dl.dropbox.com/u/6775/multiply/index.html
感謝
這是一個*優秀*的解決方案,但我只是意識到爲什麼我從來沒有考慮過它:這個應用程序必須支持10.4 :(:(我將它標記爲正確,因爲它*是*正確的所述問題) – nevyn 2010-09-20 07:29:06