mirror of
https://github.com/specht/champ.git
synced 2025-01-17 20:30:09 +00:00
better highlighting in watch graphs
This commit is contained in:
parent
a091d74dcd
commit
96ac1e69cf
155
champ.rb
155
champ.rb
@ -248,39 +248,147 @@ class Champ
|
|||||||
io.puts "<div style='display: inline-block;'>"
|
io.puts "<div style='display: inline-block;'>"
|
||||||
io.puts "<h3>#{watch[:components].map { |x| x[:name] }.join('/')} (#{File.basename(@source_path)}:#{watch[:line_number]})</h3>"
|
io.puts "<h3>#{watch[:components].map { |x| x[:name] }.join('/')} (#{File.basename(@source_path)}:#{watch[:line_number]})</h3>"
|
||||||
if @watch_values.include?(index)
|
if @watch_values.include?(index)
|
||||||
if watch[:components].size == 1
|
pixels = nil
|
||||||
io.puts '<em>TODO</em>'
|
width = nil
|
||||||
elsif watch[:components].size == 2
|
height = nil
|
||||||
histogram = {}
|
histogram = {}
|
||||||
|
mask = [
|
||||||
|
[0,0,1,1,1,0,0],
|
||||||
|
[0,1,1,1,1,1,0],
|
||||||
|
[1,1,1,1,1,1,1],
|
||||||
|
[1,1,1,1,1,1,1],
|
||||||
|
[1,1,1,1,1,1,1],
|
||||||
|
[0,1,1,1,1,1,0],
|
||||||
|
[0,0,1,1,1,0,0]
|
||||||
|
]
|
||||||
@watch_values[index].each do |item|
|
@watch_values[index].each do |item|
|
||||||
histogram[item.join('/')] ||= 0
|
normalized_item = []
|
||||||
histogram[item.join('/')] += 1
|
item.each.with_index do |x, i|
|
||||||
end
|
|
||||||
histogram_max = histogram.values.max
|
|
||||||
width = 256
|
|
||||||
height = 256
|
|
||||||
pixels = [63] * width * height
|
|
||||||
histogram.each_pair do |key, value|
|
|
||||||
key_parts = key.split('/').map { |x| x.to_i }
|
|
||||||
(0..1).each do |i|
|
|
||||||
if watch[:components][i][:type] == 's8'
|
if watch[:components][i][:type] == 's8'
|
||||||
key_parts[i] = key_parts[i] + 128
|
x += 128
|
||||||
elsif watch[:components][i][:type] == 'u16'
|
elsif watch[:components][i][:type] == 'u16'
|
||||||
key_parts[i] = key_parts[i] >> 8
|
x >>= 8
|
||||||
elsif watch[:components][i][:type] == 's16'
|
elsif watch[:components][i][:type] == 's16'
|
||||||
key_parts[i] = (key_parts[i] + 32768) >> 8
|
x = (x + 32768) >> 8
|
||||||
end
|
end
|
||||||
|
normalized_item << x
|
||||||
end
|
end
|
||||||
x = key_parts[0]
|
offset = normalized_item.inject(0) { |x, y| (x << 8) + y }
|
||||||
y = 255 - key_parts[1]
|
histogram[offset] ||= 0
|
||||||
pixels[y * width + x] = (((value.to_f / histogram_max) ** 0.5) * 63).to_i
|
histogram[offset] += 1
|
||||||
end
|
end
|
||||||
|
|
||||||
gi, go, gt = Open3.popen2("./pgif #{width} #{height} 64")
|
histogram_max = histogram.values.max
|
||||||
(0...64).each do |i|
|
width = 256
|
||||||
g = ((i + 1) << 2) - 1
|
height = (watch[:components].size == 1) ? 128 : 256
|
||||||
gi.puts sprintf('%02x%02x%02x', g, g, g)
|
pixels = [64] * width * height
|
||||||
|
|
||||||
|
histogram.each_pair do |key, value|
|
||||||
|
y = key & 0xff;
|
||||||
|
x = height - 1 - ((key >> 8) & 0xff)
|
||||||
|
ymin = y
|
||||||
|
ymax = y
|
||||||
|
if watch[:components].size == 1
|
||||||
|
ymin = height - 1 - (value.to_f * (height - 1) / histogram_max).to_i
|
||||||
|
ymax = height - 1
|
||||||
end
|
end
|
||||||
|
(ymin..ymax).each do |y|
|
||||||
|
(0..6).each do |dy|
|
||||||
|
py = y + dy - 3
|
||||||
|
if py >= 0 && py < height
|
||||||
|
(0..6).each do |dx|
|
||||||
|
next if mask[dy][dx] == 0
|
||||||
|
px = x + dx - 3
|
||||||
|
if px >= 0 && px < width
|
||||||
|
if pixels[py * width + px] == 64
|
||||||
|
pixels[py * width + px] = 0
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
pixels[y * width + x] = (((value.to_f / histogram_max) ** 0.5) * 63).to_i
|
||||||
|
end
|
||||||
|
end
|
||||||
|
# if watch[:components].size == 1
|
||||||
|
# @watch_values[index].each do |item|
|
||||||
|
# if watch[:components][0][:type] == 's8'
|
||||||
|
# item[0] += 128
|
||||||
|
# elsif watch[:components][0][:type] == 'u16'
|
||||||
|
# item[0] >>= 8
|
||||||
|
# elsif watch[:components][0][:type] == 's16'
|
||||||
|
# item[0] = (item[0] + 32768) >> 8
|
||||||
|
# end
|
||||||
|
# histogram[item] ||= 0
|
||||||
|
# histogram[item] += 1
|
||||||
|
# end
|
||||||
|
# histogram_max = histogram.values.max
|
||||||
|
# width = 256
|
||||||
|
# height = 128
|
||||||
|
# pixels = [64] * width * height
|
||||||
|
# histogram.each_pair do |key, value|
|
||||||
|
# key_parts = key
|
||||||
|
# (0..(((value.to_f / histogram_max) * 127).to_i)).each do |y|
|
||||||
|
# x = key_parts[0]
|
||||||
|
# pixels[(127 - y) * width + x] = (((value.to_f / histogram_max) ** 0.5) * 63).to_i
|
||||||
|
# end
|
||||||
|
# end
|
||||||
|
# elsif watch[:components].size == 2
|
||||||
|
# @watch_values[index].each do |item|
|
||||||
|
# normalized_item = []
|
||||||
|
# item.each.with_index do |x, i|
|
||||||
|
# if watch[:components][i][:type] == 's8'
|
||||||
|
# x += 128
|
||||||
|
# elsif watch[:components][i][:type] == 'u16'
|
||||||
|
# x >>= 8
|
||||||
|
# elsif watch[:components][i][:type] == 's16'
|
||||||
|
# x = (x + 32768) >> 8
|
||||||
|
# end
|
||||||
|
# normalized_item << x
|
||||||
|
# end
|
||||||
|
# offset = (normalized_item[1] << 8) + normalized_item[0]
|
||||||
|
# histogram[offset] ||= 0
|
||||||
|
# histogram[offset] += 1
|
||||||
|
# end
|
||||||
|
# histogram_max = histogram.values.max
|
||||||
|
# width = 256
|
||||||
|
# height = 256
|
||||||
|
# pixels = [64] * width * height
|
||||||
|
# histogram.each_pair do |key, value|
|
||||||
|
# x = key & 0xff;
|
||||||
|
# y = 255 - ((key >> 8) & 0xff)
|
||||||
|
# (0..6).each do |dy|
|
||||||
|
# py = y + dy - 3
|
||||||
|
# if py >= 0 && py < height
|
||||||
|
# (0..6).each do |dx|
|
||||||
|
# next if mask[dy][dx] == 0
|
||||||
|
# px = x + dx - 3
|
||||||
|
# if py >= 0 && py < height
|
||||||
|
# if pixels[py * width + px] == 64
|
||||||
|
# pixels[py * width + px] = 0
|
||||||
|
# end
|
||||||
|
# end
|
||||||
|
# end
|
||||||
|
# end
|
||||||
|
# end
|
||||||
|
# pixels[y * width + x] = (((value.to_f / histogram_max) ** 0.5) * 63).to_i
|
||||||
|
# end
|
||||||
|
# end
|
||||||
|
|
||||||
|
if pixels
|
||||||
|
gi, go, gt = Open3.popen2("./pgif #{width} #{height} 65")
|
||||||
|
(0...64).each do |i|
|
||||||
|
l = (((63 - i) + 1) << 2) - 1
|
||||||
|
# fce98d
|
||||||
|
r = 0xfc
|
||||||
|
g = 0xe9
|
||||||
|
b = 0x8d
|
||||||
|
gi.puts sprintf('%02x%02x%02x',
|
||||||
|
l * r / 255,
|
||||||
|
l * g / 255,
|
||||||
|
l * b / 255)
|
||||||
|
end
|
||||||
|
gi.puts 'ffffff'
|
||||||
gi.puts 'f'
|
gi.puts 'f'
|
||||||
gi.puts pixels.map { |x| sprintf('%02x', x) }.join("\n")
|
gi.puts pixels.map { |x| sprintf('%02x', x) }.join("\n")
|
||||||
gi.close
|
gi.close
|
||||||
@ -289,7 +397,6 @@ class Champ
|
|||||||
File::open(watch_path, 'w') do |f|
|
File::open(watch_path, 'w') do |f|
|
||||||
f.write go.read
|
f.write go.read
|
||||||
end
|
end
|
||||||
|
|
||||||
io.puts "<img src='#{watch_path}'></img>"
|
io.puts "<img src='#{watch_path}'></img>"
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
|
Loading…
x
Reference in New Issue
Block a user