【问题标题】:Implementing Porter-Duff compositing operations in iOS在 iOS 中实现 Porter-Duff 合成操作
【发布时间】:2016-05-02 09:14:22
【问题描述】:

iOS SDK 中是否有 Porter-Duff 合成操作?

基础 12 Porter-Duff 合成操作。

【问题讨论】:

    标签: ios image-processing porter-duff


    【解决方案1】:

    iOS CoreGraphics 框架支持以下类型的混合模式,包括Porter-Duff。

    typedef CF_ENUM (int32_t, CGBlendMode) {
        /* Available in Mac OS X 10.4 & later. */
        kCGBlendModeNormal,
        kCGBlendModeMultiply,
        kCGBlendModeScreen,
        kCGBlendModeOverlay,
        kCGBlendModeDarken,
        kCGBlendModeLighten,
        kCGBlendModeColorDodge,
        kCGBlendModeColorBurn,
        kCGBlendModeSoftLight,
        kCGBlendModeHardLight,
        kCGBlendModeDifference,
        kCGBlendModeExclusion,
        kCGBlendModeHue,
        kCGBlendModeSaturation,
        kCGBlendModeColor,
        kCGBlendModeLuminosity,
    
        /* Available in Mac OS X 10.5 & later. R, S, and D are, respectively,
           premultiplied result, source, and destination colors with alpha; Ra,
           Sa, and Da are the alpha components of these colors.
    
           The Porter-Duff "source over" mode is called `kCGBlendModeNormal':
             R = S + D*(1 - Sa)
    
           Note that the Porter-Duff "XOR" mode is only titularly related to the
           classical bitmap XOR operation (which is unsupported by
           CoreGraphics). */
    
        kCGBlendModeClear,                  /* R = 0 */
        kCGBlendModeCopy,                   /* R = S */
        kCGBlendModeSourceIn,               /* R = S*Da */
        kCGBlendModeSourceOut,              /* R = S*(1 - Da) */
        kCGBlendModeSourceAtop,             /* R = S*Da + D*(1 - Sa) */
        kCGBlendModeDestinationOver,        /* R = S*(1 - Da) + D */
        kCGBlendModeDestinationIn,          /* R = D*Sa */
        kCGBlendModeDestinationOut,         /* R = D*(1 - Sa) */
        kCGBlendModeDestinationAtop,        /* R = S*(1 - Da) + D*Sa */
        kCGBlendModeXOR,                    /* R = S*(1 - Da) + D*(1 - Sa) */
        kCGBlendModePlusDarker,             /* R = MAX(0, (1 - D) + (1 - S)) */
        kCGBlendModePlusLighter             /* R = MIN(1, S + D) */
    };
    

    以下 Apple 开发者链接演示了如何实现 Porter-Duff 混合。

    https://developer.apple.com/library/ios/samplecode/QuartzDemo/Listings/QuartzDemo_QuartzBlendingViewController_m.html

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2013-07-02
      • 2012-05-02
      • 1970-01-01
      • 2017-03-02
      • 2016-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-25
      相关资源
      最近更新 更多