どこまで使えるか否か。
Android との互換性を考えると,基本的な PorterDuffMode しか使えないなーという感じですね。
WinObjC という Windows Runtime 上で動く iOS 互換環境の CoreGraphics でもおなじみのように,ほぼ全てのモードが Windows 上で使えます。唯一,「kCGBlendModePlusDarker」のみシミュレーションできませんね。
※ 表は横スクロールできます
| Mode Expression |
Android PorterDuff.Mode |
Apple CGBlendMode |
Direct2D D2D1_COMPOSITE_MODE |
Direct2D D2D1_BLEND_MODE |
|---|---|---|---|---|
| Clear O = 0 |
△ (Software only: CLEAR) |
kCGBlendModeClear | × | × |
| SourceCopy O = S |
SRC | kCGBlendModeCopy | D2D1_COMPOSITE_MODE_SOURCE_COPY | × |
| DestinationCopy O = D |
DST | × | × | × |
| SourceOver O = S + (1 - Sa) * D |
SRC_OVER | kCGBlendModeNormal | D2D1_COMPOSITE_MODE_SOURCE_OVER | × |
| DestinationOver O = (1 - Da) * S + D |
DST_OVER | kCGBlendModeDestinationOver | D2D1_COMPOSITE_MODE_DESTINATION_OVER | × |
| SourceIn O = Da * S |
SRC_IN | kCGBlendModeSourceIn | D2D1_COMPOSITE_MODE_SOURCE_IN | × |
| DestinationIn O = Sa * D |
DST_IN | kCGBlendModeDestinationIn | D2D1_COMPOSITE_MODE_DESTINATION_IN | × |
| SourceOut O = (1 - Da) * S |
SRC_OUT | kCGBlendModeSourceOut | D2D1_COMPOSITE_MODE_SOURCE_OUT | × |
| DestinationOut O = (1 - Sa) * D |
DST_OUT | kCGBlendModeDestinationOut | D2D1_COMPOSITE_MODE_DESTINATION_OUT | × |
| SourceAtop O = Da * S + (1 - Sa) * D |
SRC_ATOP | kCGBlendModeSourceAtop | D2D1_COMPOSITE_MODE_SOURCE_ATOP | × |
| DestinationAtop O = (1 - Da) * S + Sa * D |
DST_ATOP | kCGBlendModeDestinationAtop | D2D1_COMPOSITE_MODE_DESTINATION_ATOP | × |
| Xor O = (1 - Da) * S + (1 - Sa) * D |
XOR | △ ( kCGBlendModeXOR) |
D2D1_COMPOSITE_MODE_XOR | × |
| Add O = min(1, S + D) |
ADD | kCGBlendModePlusLighter | D2D1_COMPOSITE_MODE_PLUS | × |
| PlusDarker O = max(0, 1 - (1 - S) - (1 - D)) |
× | kCGBlendModePlusDarker | × | × |
| BoundedSourceCopy O = S (範囲内のみ) |
× | × | D2D1_COMPOSITE_MODE_BOUNDED_SOURCE_COPY | × |
| MaskInvert O = (1 - D) * S + (1 - Sa) * D |
× | × | D2D1_COMPOSITE_MODE_MASK_INVERT | × |
| ? | × | × | D2D1_COMPOSITE_MODE_FORCE_DWORD | D2D1_BLEND_MODE_FORCE_DWORD |
| Darken O = (1 - Da) * S + (1 - Sa) * D + min(S, D) |
△ (Software only: DARKEN) |
kCGBlendModeDarken | × | D2D1_BLEND_MODE_DARKEN |
| Lighten O = (1 - Da) * S + (1 - Sa) * D + max(S, D) |
△ (Software only: LIGHTEN) |
kCGBlendModeLighten | × | D2D1_BLEND_MODE_LIGHTEN |
| Multiply O = S * D |
MULTIPLY | kCGBlendModeMultiply | × | D2D1_BLEND_MODE_MULTIPLY |
| Screen O = S + D - (S * D) |
SCREEN | kCGBlendModeScreen | × | D2D1_BLEND_MODE_SCREEN |
| Overlay O = 2 * Sa * Da * S * D - 2 * (Da - S) * (Sa - D) |
△ (Software only: OVERLAY) |
kCGBlendModeOverlay | × | D2D1_BLEND_MODE_OVERLAY |
| ColorDodge | × | kCGBlendModeColorDodge | × | D2D1_BLEND_MODE_COLOR_DODGE |
| LinearDodge | × | × | × | D2D1_BLEND_MODE_LINEAR_DODGE |
| ColorBurn | × | kCGBlendModeColorBurn | × | D2D1_BLEND_MODE_COLOR_BURN |
| LinearBurn | × | × | × | D2D1_BLEND_MODE_LINEAR_BURN |
| DarkerColor | × | × | × | D2D1_BLEND_MODE_DARKER_COLOR |
| LighterColor | × | × | × | D2D1_BLEND_MODE_LIGHTER_COLOR |
| SoftLight | × | kCGBlendModeSoftLight | × | D2D1_BLEND_MODE_SOFT_LIGHT |
| HardLight | × | kCGBlendModeHardLight | × | D2D1_BLEND_MODE_HARD_LIGHT |
| Vivid | × | × | × | D2D1_BLEND_MODE_VIVID_LIGHT |
| LinearLight | × | × | × | D2D1_BLEND_MODE_LINEAR_LIGHT |
| PinLight | × | × | × | D2D1_BLEND_MODE_PIN_LIGHT |
| HardMix | × | × | × | D2D1_BLEND_MODE_HARD_MIX |
| Difference | × | kCGBlendModeDifference | × | D2D1_BLEND_MODE_DIFFERENCE |
| Exculusion | × | kCGBlendModeExclusion | × | D2D1_BLEND_MODE_EXCLUSION |
| Hue | × | kCGBlendModeHue | × | D2D1_BLEND_MODE_HUE |
| Saturation | × | kCGBlendModeSaturation | × | D2D1_BLEND_MODE_SATURATION |
| Color | × | kCGBlendModeColor | × | D2D1_BLEND_MODE_COLOR |
| Luminosity | × | kCGBlendModeLuminosity | × | D2D1_BLEND_MODE_LUMINOSITY |
| Subtract | × | kCGBlendModeLuminosity | × | D2D1_BLEND_MODE_SUBTRACT |
| Dissolve | × | × | × | D2D1_BLEND_MODE_DISSOLVE |
参考用
PorterDuff.Mode | Android Developers
CGBlendMode - Core Graphics | Apple Developer Documentation
https://skia.org/user/api/skpaint_overview