PNG のエンコードとデコード
PNG エンコーダーは、行ピッチ付きの RGBA または BGRA のピクセルから 8 ビットの RGB か RGBA のファイルを書き出します。デコーダーは、インターレースなしのグレースケール、パレット、RGB、RGBA の画像を、確認済みのゲストのバッファに読み込みます。
2026年10月10日 までのリポジトリノート
エンコード
タイトルはエンコーダーに、行ピッチが幅より大きいこともあるピクセルの矩形を渡します。PS5PCEM は行ピッチ付きの RGBA と BGRA を受け付け、標準的な 8 ビットの RGB または RGBA の PNG を書き出します。呼び出し側がスキャンラインのフィルターと 0~9 の圧縮レベルを選びます。出力の書き込みは、タイトルが用意したバッファの範囲に限られます。
エンコーダーはファイル形式のソフトウェア実装です。システムの画像ライブラリを呼び出すことはなく、本体のハードウェアエンコーダーに対する特定の速度を主張するものでもありません。
デコード
libScePngDec は PNG のメタデータを解析し、インターレースなしのグレースケール、パレット、RGB、RGBA の画像を、確認済みのゲストの RGBA または BGRA のバッファにデコードします。スキャンラインのフィルターを適用し、パレットの透明度も反映します。ピクセルを書き込む前に書き込み先を確認します。
Adam7 のインターレース入力は認識したうえで、間違った画像にデコードせず拒否します。そのため、インターレースのアイコンやスクリーンショットが黙って崩れたバッファになることはありません。
位置づけ
PNG は、タイトルが起動時に使う小さなファームウェアサービスのひとつで、アイコン、アトラス、セーブのサムネイルに使われます。H.264 に FFmpeg を使う AvPlayer のムービーの経路とも、フォントのラスタライザーとも独立しています。
10 月 9 日のファームウェアのレポートでは、エンコーダーを時計と AMPR の完了サイズの問い合わせとまとめています。この 3 つはインポートの穴を埋めたものです。それだけで計測したフレーム時間が変わることはありません。
実装済みのこと
- 行ピッチ付きの RGBA と BGRA の入力から、圧縮レベル 0~9 で 8 ビットの RGB または RGBA の PNG へ。
- フィルターとパレットのアルファを含む、インターレースなしのグレースケール、パレット、RGB、RGBA のデコード。
- 確認済みの書き込み先バッファと、範囲に収まるエンコーダーの出力。
まだ足りないこと
- Adam7 のインターレース PNG は認識しますがデコードしません。
- 16 ビットや特殊な補助チャンクは、実装した範囲の外です。
- ハードウェアの PNG ブロックはありません。どちらも CPU で動きます。
関連するしくみ
これらのページについて