Sha256: 564897cfd52432f595d1adb224653e8cb36995cc99f443371b5ade6a4b1d8f13

Contents?: true

Size: 1.35 KB

Versions: 2

Compression:

Stored size: 1.35 KB

Contents

class ASE
  module Writer
    def to_file(file)
      @file = file
      write!
    end

    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 }

      # Signature
      @file.write "ASEF"

      # Version
      @file.write_ushort 1, 0

      # Number of blocks
      @file.write_ulong(color_count + (palette_count * 2))

      @palettes.each do |palette_name, palette|
        # Block start
        @file.write_ushort 0xC001

        # Block length (title is UTF-16 encoded)
        @file.write_ulong 4 + (palette_name.length * 2)

        # Palette name
        @file.write_string palette_name

        palette.colors.each do |name, color|
          # Color start
          @file.write_ushort 1

          # Block length
          @file.write_ulong 22 + (name.length * 2)

          # Color name
          @file.write_string name

          # Color mode
          @file.write 'RGB '

          # Colors
          rgb = color.to_rgb.map { |c| c / 255 }
          rgb.each { |c| @file.write [c].pack('F').reverse }
          
          # End of colors
          @file.write_null_byte
        end

        @file.write_ushort 0xC002 # Group end
        @file.write_ulong 0 # Group end block
      end

      @file.close
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
ase-1.0.1 lib/ase/writer.rb
ase-1.0.0 lib/ase/writer.rb