Skip to content

Instantly share code, notes, and snippets.

@mugyu
Created March 24, 2012 12:05
Show Gist options
  • Save mugyu/2181611 to your computer and use it in GitHub Desktop.
Save mugyu/2181611 to your computer and use it in GitHub Desktop.
RubyでAzPainterフォーマットのプレビューをbitmapフアイルに吸出し
#!/usr/bin/env ruby
# vim: fileencoding=utf-8
# AzPainterフォーマットのプレビューをbitmapフアイルに吸出し
module AZPDATA
FILEHEADER = "a7c"
FILEHEADER_LENGTH = 8
INFOHEADER = "ISSSSS"
INFOHEADER_LENGTH = 14
PREVIEW = "SSI"
PREVIEW_LENGTH = 8
def read_preview(file)
width, height = 0
image = nil
File.open(file, "rb") do |f|
head_string, version = f.read(FILEHEADER_LENGTH).unpack(FILEHEADER)
if head_string == "AZPDATA"
f.seek(INFOHEADER_LENGTH, IO::SEEK_CUR)
width, height, image_length = f.read(PREVIEW_LENGTH).unpack(PREVIEW)
image = f.read(image_length)
end
end
if image.nil?
nil
else
[width, height, image]
end
end
module_function :read_preview
end
module BITMAP
FILEHEADER = "a2VIV"
INFOHEADER = "VVVvvVVVVVV"
FILEHEADER_LENGTH = 14
INFOHEADER_LENGTH = 40
PLANES = 1
BITCOUNT = 32
HEADERS_LENGTH = FILEHEADER_LENGTH + INFOHEADER_LENGTH
def make(width, height, image)
buff = ""
buff << ["\x42\x4d",
HEADERS_LENGTH + image.length,
0,
HEADERS_LENGTH]\
.pack(FILEHEADER)
buff << [INFOHEADER_LENGTH,
width,
height,
PLANES,
BITCOUNT,
0, 0, 0, 0, 0, 0]\
.pack(INFOHEADER)
buff << image
end
module_function :make
end
if preview = AZPDATA.read_preview("example.apd")
File.open("example.apd.bmp", "wb") do |f|
f.write BITMAP.make(*preview)
end
else
warn "error"
exit 1
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment