46 lines
815 B
Plaintext
46 lines
815 B
Plaintext
|
#!/usr/bin/env ruby
|
||
|
|
||
|
if ARGV.size != 2
|
||
|
puts "Usage: $0 <filename.pcx> <Palette name>"
|
||
|
exit 1
|
||
|
end
|
||
|
|
||
|
FILENAME = ARGV[0]
|
||
|
PALETTENAME = ARGV[1]
|
||
|
|
||
|
f = File.open(FILENAME)
|
||
|
|
||
|
# In a 256-colour PCX file, the palette is stored in the final 768 bytes as RGB
|
||
|
# triplets, and the byte before that should be 0x0C: https://en.wikipedia.org/wiki/PCX#Color_palette
|
||
|
f.seek(-769, IO::SEEK_END)
|
||
|
|
||
|
raise "Check byte is wrong" unless f.read(1) == "\x0C"
|
||
|
|
||
|
puts <<EOF
|
||
|
package palettes
|
||
|
|
||
|
import "image/color"
|
||
|
|
||
|
var (
|
||
|
#{PALETTENAME}Palette = color.Palette{
|
||
|
Transparent,
|
||
|
|
||
|
EOF
|
||
|
|
||
|
# bytes.shift(3) # Ignore idx 0 so we can make it transparent
|
||
|
|
||
|
256.times do
|
||
|
r, g, b = f.read(3).bytes
|
||
|
|
||
|
puts "\t\tcolor.RGBA{R: #{r}, G: #{g}, B: #{b}, A: 255},"
|
||
|
end
|
||
|
|
||
|
puts <<EOF
|
||
|
}
|
||
|
)
|
||
|
|
||
|
func init() {
|
||
|
Palettes["#{PALETTENAME}"] = #{PALETTENAME}Palette
|
||
|
}
|
||
|
EOF
|