Method: PSD::Renderer::Blender#compose!
- Defined in:
- lib/psd/renderer/blender.rb
#compose! ⇒ Object
Composes the foreground Canvas onto the background Canvas using the blending mode specified by the foreground.
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/psd/renderer/blender.rb', line 18 def compose! PSD.logger.debug "#{fg.node.debug_name} -> #{bg.node.debug_name}: #{fg.node.blending_mode} blending" PSD.logger.debug "fg: (#{fg.left}, #{fg.top}) #{fg.width}x#{fg.height}; bg: (#{bg.left}, #{bg.top}) #{bg.width}x#{bg.height}" offset_x = fg.left - bg.left offset_y = fg.top - bg.top fg.height.times do |y| fg.width.times do |x| base_x = x + offset_x base_y = y + offset_y next if base_x < 0 || base_y < 0 || base_x >= bg.width || base_y >= bg.height color = Compose.send( fg.node.blending_mode, fg.get_pixel(x, y), bg.get_pixel(base_x, base_y), calculated_opacity ) bg.set_pixel base_x, base_y, color end end end |