8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
# File 'lib/ase/writer.rb', line 8
def write!
raise "Must specify an output file" if @file.nil?
@file = File.new(@file, 'wb')
palette_count = @palettes.length
color_count = @palettes.inject(0) { |sum, p| p.size }
@file.write "ASEF"
@file.write_ushort 1, 0
@file.write_ulong(color_count + (palette_count * 2))
@palettes.each do |palette_name, palette|
@file.write_ushort 0xC001
@file.write_ulong 4 + (palette_name.length * 2)
@file.write_string palette_name
palette.colors.each do |name, color|
@file.write_ushort 1
@file.write_ulong 22 + (name.length * 2)
@file.write_string name
@file.write 'RGB '
rgb = color.to_rgb.map { |c| c / 255 }
rgb.each { |c| @file.write [c].pack('F').reverse }
@file.write_null_byte
end
@file.write_ushort 0xC002 @file.write_ulong 0 end
@file.close
end
|