redgreenblue 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/lib/redgreenblue.rb +22 -0
- data/lib/redgreenblue/24bit.rb +47 -0
- data/lib/redgreenblue/48bit.rb +47 -0
- data/lib/redgreenblue/base.rb +38 -0
- data/lib/redgreenblue/bgr24bit.rb +20 -0
- data/lib/redgreenblue/gif.rb +17 -0
- data/lib/redgreenblue/hex.rb +36 -0
- data/lib/redgreenblue/lazy.rb +11 -0
- data/lib/redgreenblue/misc.rb +60 -0
- data/lib/redgreenblue/nice.rb +7 -0
- data/lib/redgreenblue/os.rb +3 -0
- data/lib/redgreenblue/os/mac.rb +50 -0
- data/lib/redgreenblue/random.rb +17 -0
- data/lib/redgreenblue/rgb565.rb +26 -0
- data/lib/redgreenblue/version.rb +3 -0
- metadata +57 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 1cac7c885ca1de3e3fe22ebfaf7207dd17b7bd25e8c1dd6f82cfdab0e0b5cee1
|
4
|
+
data.tar.gz: 7ca71212d78ae2a638d8bfb54dcb8a824367eac6e7fe8ca1eaa1e239b22bbaa9
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 23316f3526690807fabde09d5a909ae7afe396da7b039baa6352c814ab653d02ee5646aa23ece364748cf090f4b9218a34c0cd19b8a04313086b2c5f9dcadf97
|
7
|
+
data.tar.gz: 19f71a26312a83d845f8ff508758e653b693289be129e02281e65cb8da4b13d32ab5b58282883ea0d0dc4c156ddd775c0179354bea5dccc6065f00ad49b7f66c
|
data/lib/redgreenblue.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
class RGB
|
2
|
+
end
|
3
|
+
|
4
|
+
require 'redgreenblue/version'
|
5
|
+
|
6
|
+
require 'redgreenblue/base'
|
7
|
+
|
8
|
+
require 'redgreenblue/24bit'
|
9
|
+
require 'redgreenblue/48bit'
|
10
|
+
require 'redgreenblue/hex'
|
11
|
+
|
12
|
+
require 'redgreenblue/lazy'
|
13
|
+
require 'redgreenblue/nice'
|
14
|
+
|
15
|
+
require 'redgreenblue/rgb565'
|
16
|
+
require 'redgreenblue/bgr24bit'
|
17
|
+
require 'redgreenblue/gif'
|
18
|
+
|
19
|
+
require 'redgreenblue/misc'
|
20
|
+
require 'redgreenblue/random'
|
21
|
+
|
22
|
+
require 'redgreenblue/os'
|
@@ -0,0 +1,47 @@
|
|
1
|
+
class RGB
|
2
|
+
|
3
|
+
# r, g, b methods
|
4
|
+
|
5
|
+
def r
|
6
|
+
(red * 255).round
|
7
|
+
end
|
8
|
+
|
9
|
+
def g
|
10
|
+
(green * 255).round
|
11
|
+
end
|
12
|
+
|
13
|
+
def b
|
14
|
+
(blue * 255).round
|
15
|
+
end
|
16
|
+
|
17
|
+
def r=(n)
|
18
|
+
self.red = n / 255.0
|
19
|
+
end
|
20
|
+
|
21
|
+
def g=(n)
|
22
|
+
self.green = n / 255.0
|
23
|
+
end
|
24
|
+
|
25
|
+
def b=(n)
|
26
|
+
self.blue = n / 255.0
|
27
|
+
end
|
28
|
+
|
29
|
+
# rgb methods
|
30
|
+
|
31
|
+
def rgb
|
32
|
+
[r,g,b]
|
33
|
+
end
|
34
|
+
|
35
|
+
def rgb=(rgb)
|
36
|
+
self.r, self.g, self.b = rgb
|
37
|
+
end
|
38
|
+
|
39
|
+
# factory method
|
40
|
+
|
41
|
+
def self.rgb(rgb)
|
42
|
+
c = self.new
|
43
|
+
c.rgb = rgb
|
44
|
+
c
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
class RGB
|
2
|
+
|
3
|
+
# rr, gg, bb methods
|
4
|
+
|
5
|
+
def rr
|
6
|
+
(red * 65535).round
|
7
|
+
end
|
8
|
+
|
9
|
+
def gg
|
10
|
+
(green * 65535).round
|
11
|
+
end
|
12
|
+
|
13
|
+
def bb
|
14
|
+
(blue * 65535).round
|
15
|
+
end
|
16
|
+
|
17
|
+
def rr=(n)
|
18
|
+
self.red = n / 65535.0
|
19
|
+
end
|
20
|
+
|
21
|
+
def gg=(n)
|
22
|
+
self.green = n / 65535.0
|
23
|
+
end
|
24
|
+
|
25
|
+
def bb=(n)
|
26
|
+
self.blue = n / 65535.0
|
27
|
+
end
|
28
|
+
|
29
|
+
# rrggbb methods
|
30
|
+
|
31
|
+
def rrggbb
|
32
|
+
[rr,gg,bb]
|
33
|
+
end
|
34
|
+
|
35
|
+
def rrggbb=(rrggbb)
|
36
|
+
self.rr, self.gg, self.bb = rrggbb
|
37
|
+
end
|
38
|
+
|
39
|
+
# factory method
|
40
|
+
|
41
|
+
def self.rrggbb(rrggbb)
|
42
|
+
c = self.new
|
43
|
+
c.rrggbb = rrggbb
|
44
|
+
c
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
class RGB
|
2
|
+
|
3
|
+
attr_reader :red, :green, :blue
|
4
|
+
|
5
|
+
def initialize(a=[0.5, 0.5, 0.5])
|
6
|
+
self.values = a
|
7
|
+
end
|
8
|
+
|
9
|
+
def red=(n)
|
10
|
+
@red = limit(n)
|
11
|
+
end
|
12
|
+
|
13
|
+
def green=(n)
|
14
|
+
@green = limit(n)
|
15
|
+
end
|
16
|
+
|
17
|
+
def blue=(n)
|
18
|
+
@blue = limit(n)
|
19
|
+
end
|
20
|
+
|
21
|
+
def values
|
22
|
+
[ red, green, blue ]
|
23
|
+
end
|
24
|
+
|
25
|
+
alias to_a values
|
26
|
+
|
27
|
+
def values=(a)
|
28
|
+
self.red, self.green, self.blue = a
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
# limit to 0..1
|
34
|
+
def limit(n)
|
35
|
+
n <= 0 ? 0.0 : n >= 1 ? 1.0 : n
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
class RGB
|
2
|
+
|
3
|
+
# bgr 24-bit methods (as used by BMP bitmaps)
|
4
|
+
|
5
|
+
def bgr24
|
6
|
+
[b, g, r].pack('C3')
|
7
|
+
end
|
8
|
+
|
9
|
+
def bgr24=(s)
|
10
|
+
self.b, self.g, self.r = s.unpack('C3')
|
11
|
+
end
|
12
|
+
|
13
|
+
# factory method
|
14
|
+
def self.bgr24(bgr)
|
15
|
+
c = self.new
|
16
|
+
c.bgr24 = bgr
|
17
|
+
c
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class RGB
|
2
|
+
|
3
|
+
# Return a 1-pixel GIF
|
4
|
+
#
|
5
|
+
# With help from:
|
6
|
+
# - http://www.perlmonks.org/?node_id=7974
|
7
|
+
def gif_pixel
|
8
|
+
"GIF89a\1\0\1\0\x90\0\0".b +
|
9
|
+
rgb.pack('C3') +
|
10
|
+
"\0\0\0,\0\0\0\0\1\0\1\0\0\x02\x02\x04\1\0;".b
|
11
|
+
end
|
12
|
+
|
13
|
+
def gif_pixel_write(file_path)
|
14
|
+
File.binwrite(file_path, gif_pixel)
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
class RGB
|
2
|
+
|
3
|
+
def hex(shorthand=false)
|
4
|
+
if shorthand
|
5
|
+
RGB.hex_shorthand hexadecimal
|
6
|
+
else
|
7
|
+
hexadecimal
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def hex=(s)
|
12
|
+
if ( s =~ /^(#?)(\h\h)(\h\h)(\h\h)$/ ) # 6-digit hex
|
13
|
+
self.rgb = [ $2.to_i(16), $3.to_i(16), $4.to_i(16) ]
|
14
|
+
elsif ( s =~ /^(#?)(\h)(\h)(\h)$/ ) # 3-digit hex
|
15
|
+
self.rgb = [ ($2*2).to_i(16), ($3*2).to_i(16), ($4*2).to_i(16) ]
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
# factory method
|
20
|
+
def self.hex(s)
|
21
|
+
c = self.new
|
22
|
+
c.hex = s
|
23
|
+
c
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.hex_shorthand(h)
|
27
|
+
h.sub( /^(#?)(\h)\2(\h)\3(\h)\4$/, '\1\2\3\4' )
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def hexadecimal
|
33
|
+
'%02x%02x%02x' % [ r, g, b ]
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
class RGB
|
2
|
+
|
3
|
+
# Mix
|
4
|
+
|
5
|
+
# Mix with second RGB color.
|
6
|
+
# p denotes portion of the mixed-in color to be used.
|
7
|
+
# p=0 delivers pure original color (no change),
|
8
|
+
# p=1 delivers pure mixed-in color.
|
9
|
+
|
10
|
+
def mix!(color,p=0.5)
|
11
|
+
self.values = mix_values(color.values, p)
|
12
|
+
self
|
13
|
+
end
|
14
|
+
|
15
|
+
def mix(color,p=0.5)
|
16
|
+
RGB.new mix_values(color.values, p)
|
17
|
+
end
|
18
|
+
|
19
|
+
# Invert
|
20
|
+
|
21
|
+
def invert!
|
22
|
+
self.values = values.map { |v| 1-v }
|
23
|
+
self
|
24
|
+
end
|
25
|
+
|
26
|
+
def invert
|
27
|
+
dup.invert!
|
28
|
+
end
|
29
|
+
|
30
|
+
# Mix with white
|
31
|
+
|
32
|
+
def whiten!(p)
|
33
|
+
mix!(RGB.white, p)
|
34
|
+
end
|
35
|
+
|
36
|
+
def whiten(p)
|
37
|
+
mix(RGB.white, p)
|
38
|
+
end
|
39
|
+
|
40
|
+
# Mix with black
|
41
|
+
|
42
|
+
def blacken!(p)
|
43
|
+
mix!(RGB.black, p)
|
44
|
+
end
|
45
|
+
|
46
|
+
def blacken(p)
|
47
|
+
mix(RGB.black, p)
|
48
|
+
end
|
49
|
+
|
50
|
+
private
|
51
|
+
|
52
|
+
def mix_values(v, p)
|
53
|
+
raise(ArgumentError, "Portion '#{p}' not in range (0..1)") unless (0..1).include? p
|
54
|
+
[
|
55
|
+
( red * (1-p) ) + ( v[0] * p ),
|
56
|
+
( green * (1-p) ) + ( v[1] * p ),
|
57
|
+
( blue * (1-p) ) + ( v[2] * p )
|
58
|
+
]
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
class RGB
|
2
|
+
|
3
|
+
def pick
|
4
|
+
result = RGB.mac_choose(rrggbb)
|
5
|
+
if result
|
6
|
+
self.rrggbb = result
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
# factory method
|
11
|
+
|
12
|
+
def self.pick
|
13
|
+
result = RGB.mac_choose(RGB.new.rrggbb)
|
14
|
+
if result
|
15
|
+
RGB.rrggbb result
|
16
|
+
else
|
17
|
+
nil
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
# Use Applescript to call color picker on Mac.
|
24
|
+
# - requires a 48-bit RGB triplet [rr, gg, bb] for default choice.
|
25
|
+
#
|
26
|
+
# - Returns nil when <cancel> is clicked or <esc> key hit.
|
27
|
+
# - Otherwise returns 48-bit RGB triplet [rr, gg, bb].
|
28
|
+
def self.mac_choose(color)
|
29
|
+
|
30
|
+
script = <<~ENDSCRIPT
|
31
|
+
tell application "Terminal"
|
32
|
+
try
|
33
|
+
return choose color default color { #{color[0]}, #{color[1]}, #{color[2]} }
|
34
|
+
on error
|
35
|
+
return ""
|
36
|
+
end try
|
37
|
+
end tell
|
38
|
+
ENDSCRIPT
|
39
|
+
|
40
|
+
result = `osascript -e '#{script}'`.chomp
|
41
|
+
|
42
|
+
if result.empty?
|
43
|
+
nil
|
44
|
+
else
|
45
|
+
(result.split( /,\w*/ )).map { |s| s.to_i }
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class RGB
|
2
|
+
|
3
|
+
def shuffle!
|
4
|
+
self.red, self.green, self.blue = [red, green, blue].shuffle
|
5
|
+
self
|
6
|
+
end
|
7
|
+
|
8
|
+
def randomize!
|
9
|
+
self.red, self.green, self.blue = Kernel::rand, Kernel::rand, Kernel::rand
|
10
|
+
self
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.rand
|
14
|
+
new([Kernel::rand, Kernel::rand, Kernel::rand])
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
class RGB
|
2
|
+
|
3
|
+
def rgb565
|
4
|
+
[((r >> 3) << 11) + ((g >> 2) << 5) + (b >> 3)].pack 'S<'
|
5
|
+
end
|
6
|
+
|
7
|
+
# https://stackoverflow.com/questions/2442576/
|
8
|
+
def rgb565=(s)
|
9
|
+
v = ( s.unpack "S<" )[0]
|
10
|
+
self.r = ( ( v & 0xf800 ) >> 11 ) << 3
|
11
|
+
self.g = ( ( v & 0x07e0 ) >> 5 ) << 2
|
12
|
+
self.b = ( ( v & 0x001f ) ) << 3
|
13
|
+
end
|
14
|
+
|
15
|
+
def rgb565_binary
|
16
|
+
rgb565.bytes.reverse.map { |b| "%08b" % b }.join
|
17
|
+
end
|
18
|
+
|
19
|
+
# factory method
|
20
|
+
def self.rgb565(s)
|
21
|
+
c = self.new
|
22
|
+
c.rgb565 = s
|
23
|
+
c
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
metadata
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: redgreenblue
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.6.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- lllist.eu
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2019-07-24 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description:
|
14
|
+
email:
|
15
|
+
executables: []
|
16
|
+
extensions: []
|
17
|
+
extra_rdoc_files: []
|
18
|
+
files:
|
19
|
+
- lib/redgreenblue.rb
|
20
|
+
- lib/redgreenblue/24bit.rb
|
21
|
+
- lib/redgreenblue/48bit.rb
|
22
|
+
- lib/redgreenblue/base.rb
|
23
|
+
- lib/redgreenblue/bgr24bit.rb
|
24
|
+
- lib/redgreenblue/gif.rb
|
25
|
+
- lib/redgreenblue/hex.rb
|
26
|
+
- lib/redgreenblue/lazy.rb
|
27
|
+
- lib/redgreenblue/misc.rb
|
28
|
+
- lib/redgreenblue/nice.rb
|
29
|
+
- lib/redgreenblue/os.rb
|
30
|
+
- lib/redgreenblue/os/mac.rb
|
31
|
+
- lib/redgreenblue/random.rb
|
32
|
+
- lib/redgreenblue/rgb565.rb
|
33
|
+
- lib/redgreenblue/version.rb
|
34
|
+
homepage: https://github.com/lllisteu/redgreenblue
|
35
|
+
licenses:
|
36
|
+
- MIT
|
37
|
+
metadata: {}
|
38
|
+
post_install_message:
|
39
|
+
rdoc_options: []
|
40
|
+
require_paths:
|
41
|
+
- lib
|
42
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: 2.2.0
|
47
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
48
|
+
requirements:
|
49
|
+
- - ">="
|
50
|
+
- !ruby/object:Gem::Version
|
51
|
+
version: '0'
|
52
|
+
requirements: []
|
53
|
+
rubygems_version: 3.0.3
|
54
|
+
signing_key:
|
55
|
+
specification_version: 4
|
56
|
+
summary: RGB colors for Ruby
|
57
|
+
test_files: []
|