Method: PSD::Compose#exclusion

Defined in:
lib/psd/renderer/compose.rb

#exclusion(fg, bg, opacity) ⇒ Object



309
310
311
312
313
314
315
316
317
318
319
320
# File 'lib/psd/renderer/compose.rb', line 309

def exclusion(fg, bg, opacity)
  return apply_opacity(fg, opacity) if fully_transparent?(bg)
  return bg if fully_transparent?(fg)

  mix_alpha, dst_alpha = calculate_alphas(fg, bg, opacity)

  new_r = blend_channel(r(bg), r(bg) + r(fg) - (r(bg) * r(fg) >> 7), mix_alpha)
  new_g = blend_channel(g(bg), g(bg) + g(fg) - (g(bg) * g(fg) >> 7), mix_alpha)
  new_b = blend_channel(b(bg), b(bg) + b(fg) - (b(bg) * b(fg) >> 7), mix_alpha)

  rgba(new_r, new_g, new_b, dst_alpha)
end