Class: Unmagic::Color::RGB::Gradient::Linear
- Inherits:
-
Gradient::Base
- Object
- Gradient::Base
- Unmagic::Color::RGB::Gradient::Linear
- Defined in:
- lib/unmagic/color/rgb/gradient/linear.rb
Overview
Linear gradient interpolation in RGB color space.
Creates smooth color transitions by interpolating RGB components linearly between color stops. Each color stop has a position (0.0-1.0) that defines where the color appears in the gradient.
## RGB Interpolation
RGB gradients interpolate the red, green, and blue components separately. This can produce different visual results compared to HSL or OKLCH gradients, especially when transitioning through complementary colors.
## Examples
# Simple horizontal gradient
gradient = Unmagic::Color::RGB::Gradient::Linear.build(
["#FF0000", "#0000FF"],
direction: "to right"
)
bitmap = gradient.rasterize(width: 10)
bitmap.pixels[0].map(&:to_hex)
#=> ["#ff0000", "#e60019", ..., "#0000ff"]
# Gradient with intermediate stops
gradient = Unmagic::Color::RGB::Gradient::Linear.build(
[
["#FF0000", 0.0], # Red at start
["#00FF00", 0.5], # Green at middle
["#0000FF", 1.0] # Blue at end
],
direction: "to bottom"
)
bitmap = gradient.rasterize(width: 1, height: 20)
# Angled gradient
gradient = Unmagic::Color::RGB::Gradient::Linear.build(
["#FF0000", "#0000FF"],
direction: "45deg"
)
bitmap = gradient.rasterize(width: 100, height: 100)
# Use Stop objects directly
stops = [
Unmagic::Color::Gradient::Stop.new(
color: Unmagic::Color::RGB.parse("#FF0000"),
position: 0.0
),
Unmagic::Color::Gradient::Stop.new(
color: Unmagic::Color::RGB.parse("#0000FF"),
position: 1.0
)
]
direction = Unmagic::Color::Units::Degrees::Direction::LEFT_TO_RIGHT
gradient = Unmagic::Color::RGB::Gradient::Linear.new(stops, direction: direction)
Instance Attribute Summary
Attributes inherited from Gradient::Base
Class Method Summary collapse
-
.color_class ⇒ Class
Get the RGB color class.
Instance Method Summary collapse
-
#rasterize(width: 1, height: 1) ⇒ Bitmap
Rasterize the gradient to a bitmap.
Methods inherited from Gradient::Base
Constructor Details
This class inherits a constructor from Unmagic::Color::Gradient::Base
Class Method Details
Instance Method Details
#rasterize(width: 1, height: 1) ⇒ Bitmap
Rasterize the gradient to a bitmap.
Generates a bitmap containing the gradient with support for angled directions. The direction is determined by the gradient’s direction parameter.
82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
# File 'lib/unmagic/color/rgb/gradient/linear.rb', line 82 def rasterize(width: 1, height: 1) raise self.class::Error, "width must be at least 1" if width < 1 raise self.class::Error, "height must be at least 1" if height < 1 # Get the angle from the direction's "to" component degrees = @direction.to.value # Generate pixels row by row pixels = Array.new(height) do |y| Array.new(width) do |x| position = calculate_position(x, y, width, height, degrees) color_at_position(position) end end Unmagic::Color::Gradient::Bitmap.new( width: width, height: height, pixels: pixels, ) end |