プチコン3号&BIGまとめWiki

投稿プログラム : 画像の部分保存の形式「PTG」とそのライブラリ

パンくずリスト

2015年3月4日投稿 / 投稿者 : なお / タグ : 投稿プログラム ライブラリ

概要

画像を部分的に保存する仕組みと、保存されたファイルを扱うための関数集(ライブラリ)です。

ライブラリの中から、必要な関数だけ、あるいは全部を、自作のプログラムにコピーしてご利用頂くことを想定しています。

デモ

ライブラリを単体で実行すると、ライブラリを使ったデモが走ります。

サンプルプログラムを兼ねていますので、ソースと合わせてご参照頂ければと思います。

  • デモ中で、ファイルを作成する箇所があります(ファイル名:TEST.PTG)。もし同名の重要なファイルがある場合は、上書きしてしまわないよう、別プロジェクトで実行する等の回避措置をお願い致します。

公開キー

プチコン3号用の公開キーです。トップメニューの「作品公開とダウンロード」から公開キーを入力すると、作品をダウンロードすることができます。

プチコン3号/BIG 公開キー
K4DX42D

収録関数

収録している関数は下記の4つとなります。

  1. PTGSAVE
    • GRPページから矩形の範囲を指定して、PTG形式のファイルとして保存する関数です。
  2. PTGLOAD
    • PTG形式のファイルを読み込み、GRPページ上の指定座標に貼り付ける関数です。
  3. PTGENCODE
    • GSAVE命令で生成した配列を、PTG形式の配列に変換する関数です。
  4. PTGDECODE
    • PTG形式のファイルをそのままLOADした配列を、GLOAD命令に使用できる形式に変換する関数です。

※各関数の詳しい用法は、ライブラリ内のコメント文をご参照ください。

説明

プチコン3号では、GRPページを丸ごと(512x512ピクセル)ファイルとして保存することができますが、部分的に保存する命令は持っていません。

一応、GSAVE命令でGRPページの一部を配列として取得し、それをDATファイルとして保存することはできますが、丸ごとセーブした場合と比べて、ファイルサイズ効率が大幅に低下してしまいます。

このライブラリで扱っている「PTG」形式は、この欠点を解消したフォーマットです。

このライブラリを使うことで、例えば…

  • GRPページ全域は必要ないが、画像リソースを使うプロジェクトで、総容量を削減できる
    • 公開キー1つあたりの上限である4MBに抵触しそうなとき
    • SDカードの容量が心配なとき
    • 通信で画像を送る等、データをできるだけ削減したいとき
  • GRPページへの効率的な画像の敷き詰め方に悩む必要がなくなる
    • その画像が必要になったら、都度読み込めば良い

などのメリットがあります。

ぜひご活用ください。

対応グラフィックエディタ

  • PETIT BRUSH (ver1.2~) ※拙作

フォーマット

この項は技術情報です。

ライブラリをそのままご利用頂く場合、特に読んで頂く必要はありません。

PTGフォーマットとは

「PTG」(ParTial-GRP)は、GRPページ全域よりも小さい矩形の画像を、ファイルサイズ効率を落とさずに、単体のファイルとして扱うための、フォーマットの提唱です。

高度な圧縮等を行っているわけではありませんが、共通のシンプルなフォーマットとして相互利用を可能にすることで、融通性を高めることを目指しています。

  • 仕様策定にご協力頂いたMiiverseの方々に謝意を表します。

仕様

PTGフォーマットの仕様は下記の通りです。

  • 下記「R~」は、整数型の一次元配列をSAVE/LOADした時の、配列の1要素に相当する32bitの領域を、便宜的に「レコード(R)」とし、その先頭を「0」として記載したものです。
R0~1:汎用ヘッダ ※公式の各ツール(MAP、ANIM.等)のセーブ形式に準拠
  • R0:識別ID(&H5054473A「PTG:」)
  • R1:バージョン番号(現在1のみ)
R2~:リソース部(バージョン番号=1の場合)
  • R2:
    • 上位16bit:画像の幅(pixel数)
    • 下位16bit:画像の高さ(pixel数)
  • R3:
    • 上位16bit:画像の左上隅のピクセルの色情報(RGBA5551)
    • 下位16bit:その右隣のピクセルの色情報
      • 右隣が存在しない場合は、その下の行の左端のピクセルの色情報
  • R4~:以下、上記のルールで(画像の左上から右下へ、行優先で)、1Rあたり2ピクセルずつの色情報を格納

※最後のRの下位16bitに格納すべきピクセルがない場合(=総ピクセル数が奇数の場合)は、0を格納

附則
  • このフォーマットで保存されるファイル名に拡張子を付与する場合は、「.PTG」とすることを強く推奨するものとします。
  • この附則は、拡張子の付与を必須とするものではありません。

解説

正確さを期するために小難しい書き方をしていますが、要するに、

  • 物理色モード(RGBA5551=16bit)でGSAVEした整数型(sint32)配列の上位16bitが丸々無駄なので、詰めた(+ヘッダをつけた)

だけのものです。

言い換えれば、GLOAD/GSAVEとの親和性が非常に高いので、処理の大半をプチコンの標準命令に任せることができ、短いコードと高速な処理を実現しています。(ものは言いよう^^;)

最後に

なんだか大上段に構えたページになってしまいましたが、これは単に、私が開発しているお絵描きツールの部分セーブ機能について、Miiverseでご提案を頂き、フォーマットとしてスピンオフさせたものです。

標準にないフォーマットが必要になった時、各々が考案してしまうと、どうしても非互換になってしまいますが、もし共通のフォーマットがあれば、

  • ドット絵はツールAで作成し、イベント絵はツールBで作成し、読み込みは同じライブラリで同じように扱える

といったように、開発者にとって非常に融通性が高くなる→みんながプチコンで開発しやすくなる!と考えています。

ので、ぜひ、どしどしご利用くださいませ。m(__)m

グラフィックツールの開発者の方へ

もし、このフォーマットでの部分保存に対応して頂けるグラフィックエディタの作者の方がいらっしゃいましたら、共通の形式であることを利用者が認識しやすいよう、PTG形式であることを何らかの形で明記して頂けると、大変ありがたく思います。

その他の開発者の方へ

公開しているライブラリは、このフォーマットのひとつの実装例です。

もしPTGフォーマットで保存されたファイルを扱うプログラムを開発しよう!と思われた時は、仕様に則って開発して頂く限り、必ずしもこのライブラリを使う必要はありません。

ぜひ奔放に腕を奮って頂ければと思います。

CHECKER FLAG (ひとことコメント)

この作品に対するコメントがあれば一言どうぞ。(作品に直接関係ない質問や雑談は掲示板へ)


メニュー 【3号】

ヘルプ

リンク

最近の更新

最近の人気ページ

オンライン情報

  • 現在同時に 1 人がこのサイトを見ています
  • このページはこれまでに 1528 回、本日は 1 回、昨日は 0 回閲覧されました

ページの先頭に戻る

表示モード : [ スマホ・3DS対応表示 | クラシック表示 ]
PukiWiki 1.4.7 Copyright © 2001-2006 PukiWiki Developers Team. License is GPL. Based on "PukiWiki" 1.3 by yu-ji
ページの処理時間 : 0.101 秒 | このページの最終更新 : 2022/09/20 (火) 12:48:47 (565d) | ログイン
Copyright(C) 2011-2014 プチコンまとめWiki ◆1sxkymI8ji30