Hi,
i'm completely new to ncurses, so could someone with more exprerience
(or another OS) try this and tell me whats happening?
On windows all the colors are very pale (are there consts for lighter
colors?)
-----------------------------------------------------------------------
require 'RMagick'
require "ncurses"
Ncurses.initscr
puts "Usage: #{$0} <img> [size]" or exit if !ARGV[0]
puts "Sorry, no colors!" or exit unless Ncurses.has_colors?
img, size = Magick::ImageList.new(ARGV[0]), (ARGV[1]||40).to_f
factor = [size*2/img.rows, size/img.columns].min
img.resize!(img.columns*factor, (img.rows*factor*0.5).round)
COLORS =
[[Ncurses::COLOR_BLACK, [0, 0, 0]], [Ncurses::COLOR_RED, [1, 0, 0]],
[Ncurses::COLOR_GREEN, [0, 1, 0]], [Ncurses::COLOR_BLUE, [0, 0, 1]],
[Ncurses::COLOR_YELLOW, [1, 1, 0]], [Ncurses::COLOR_MAGENTA, [1, 0, 1]],
[Ncurses::COLOR_CYAN, [0, 1, 1]], [Ncurses::COLOR_WHITE, [1, 1, 1]]]
GRADIENT = [[0, ' '], [50, ':'], [100, '|'], [150, 'I'], [200, '#']]
COLORMAP = {}
COLORS.size.times do |bg|
COLORS.size.times do |fg|
next if fg == bg
i = (bg*COLORS.size) + fg
Ncurses.init_pair(i, COLORS[fg][0], COLORS[bg][0])
GRADIENT.each do |gr, c|
r = COLORS[fg][1][0] * gr + COLORS[bg][1][0] * (255-gr)
g = COLORS[fg][1][1] * gr + COLORS[bg][1][1] * (255-gr)
b = COLORS[fg][1][2] * gr + COLORS[bg][1][2] * (255-gr)
COLORMAP[[r, g, b]] = [i, c]
end
end
end
#(16*16*4).times do |i|
# Ncurses.stdscr.attrset(Ncurses.COLOR_PAIR(i))
# Ncurses.stdscr.mvaddstr(i/16, (i%16)*4, 'TEST')
#end
#Ncurses.refresh
pixels = img.get_pixels(0, 0, img.columns, img.rows)
img.rows.times do |y|
img.columns.times do |x|
p = pixels[y*img.columns + x]
r, g, b, best, dist = p.red, p.green, p.blue, -1, 255
COLORMAP.each do |k, v|
d = Math.sqrt((r-k[0])**2 + (g-k[1])**2 + (b-k[2])**2)
(best, dist = v, d) if d < dist
end
Ncurses.stdscr.attrset(Ncurses.COLOR_PAIR(best[0]))
Ncurses.stdscr.mvaddstr(y, x, best[1])
end
end
Ncurses.refresh
-----------------------------------------------------------------------
maybe someone can help..
cheers
Simon