You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
1.6 KiB
58 lines
1.6 KiB
<?php
|
|
|
|
include_once("monoformat_schema.php");
|
|
include_once("monoformat_structured.php");
|
|
|
|
if (count($argv) != 4) {
|
|
fwrite(STDERR, "Usage: $argv[0] binfile index outprefix\n");
|
|
exit(1);
|
|
}
|
|
|
|
$binfile = $argv[1];
|
|
$index = (int) $argv[2];
|
|
$outprefix = $argv[3];
|
|
|
|
$file = monoformat\parseFile(file_get_contents($binfile));
|
|
$animations = [];
|
|
foreach ($file->sections as $section) {
|
|
for ($i = 0; $i < $section->elementCount(); ++$i) {
|
|
$element = $section->elementAt($i);
|
|
if ($element->elementType() == monoformat\ElementType::Animation) {
|
|
array_push($animations, $element);
|
|
}
|
|
}
|
|
}
|
|
|
|
if ($index < 0 || $index >= count($animations)) {
|
|
$n = count($animations);
|
|
$nm1 = $n - 1;
|
|
fwrite(STDERR, "$argv[0]: the animation file contains $n animations, index $index is invalid (must be 0 .. $nm1)\n");
|
|
exit(2);
|
|
}
|
|
|
|
$animation = $animations[$index];
|
|
$height = $animation->height();
|
|
$width = $animation->width();
|
|
|
|
$nFrames = $animation->numberOfFrames();
|
|
for ($f = 0; $f < $nFrames; ++$f) {
|
|
$outfile = sprintf("%s_%04d.png", $outprefix, $f);
|
|
print("Writing $outfile...\n");
|
|
$input = $animation->image($f);
|
|
$image = imagecreatetruecolor($width, $height);
|
|
$bg = imagecolorallocate($image, 0, 0, 0);
|
|
$fg = imagecolorallocate($image, 255, 255, 255);
|
|
for ($y = 0; $y < $height; ++$y) {
|
|
for ($x = 0; $x < $width; ++$x) {
|
|
$i = $y * $width + $x;
|
|
if ($input[$i]) {
|
|
imagesetpixel($image, $x, $y, $fg);
|
|
} else {
|
|
imagesetpixel($image, $x, $y, $bg);
|
|
}
|
|
}
|
|
}
|
|
imagepng($image, $outfile);
|
|
}
|
|
|
|
?>
|
|
|