2019年3月25日月曜日

PNGのチャンク 第6回 acTL、fdATチャンク

こんにちは、きまぐれソフトです。

前回はAPNGで拡張されたチャンクを大枠を説明しました。今回からチャンクの詳細の紹介をします。先ずはacTLチャンクとfdATチャンクを紹介します。

acTLチャンク


acTLチャンクはアニメーション全体に関する情報を格納します。

  • フレーム数
  • ループ回数

フレーム数には表示するコマ数が格納されます。実態としてはfcTLチャンクの数と同じです。
ループ回数には再生時に繰り返す回数が格納されます。ループが完了したら最後のコマを表示し続けます。ここを0とした場合は永久ループと判断します。

fdATチャンク


fdATチャンクは各コマの画像実態データです。

  • シーケンス番号
  • 画像データ
シーケンス番号はfcTLチャンクとfdATチャンクを通しでカウントする連番です。
画像データはIDATチャンクと同形式の画像データを格納します。この画像を直前のコマに重ね合わせて次のコマが出来上がります。
IDATチャンクと同様、連続した複数のfdATチャンクに分割して扱う事も可能です。

カラータイプ、パレット等IDATチャンクと共通の物を使用しますが、画像サイズはIDATよりも小さい物が使用できます。画像の表示位置、透明画素の取り扱いは別途fcTLチャンクで指定します。

次回はfcTLチャンクを紹介します。アニメーションのキーとなるチャンクです。


PNGのチャンク 第5回 APNG拡張チャンク


こんにちは、きまぐれソフトです。

前回はPLTEチャンクを紹介しました。PNGの仕様で定められている必須チャンクは前回までの4つのチャンク(IDAT、PLTE、IDAT、IEND)です。その他に10個のチャンクが定められていますが、今回からは仕様から外れてAPNGで拡張されたチャンクを紹介します。

APNG拡張はPNG仕様に含まない事が決定されていて、あくまでもMozilla.orgが独自拡張した物との扱いになっています。PNG仕様はISO(ISO/IEC 15948:2003)として公開されていますが、APNGはMozilla.orgが公開(Animated PNG graphics)として公開しています。

APNGでは3つのチャンク(acTL、fcTL、fdAT)が定義され、アニメーションに対応します。acTLチャンクでアニメ再生全般に関わる情報、fcTLチャンクで各コマに関わる情報、fdATで各コマの画像を扱います。
また、IDATチャンクはアニメーション非対応環境で表示されるデフォルト画像としていますが、アニメーションの1コマ目として使用する事も出来ます。

チャンクの出現順は2種類有りますが、基本として最初にacTL、表示する画像情報の直前にfcTL、そして表示画像としてのfdATの順で並びます。

チャンク順1:デフォルト画像を1コマ目に使う場合
IHDR - fcTL - IDAT - fcTL - fdAT -...- fcTL - fdAT - IEND
チャンク順2:デフォルト画像を1コマ目に使わない場合
IHDR - IDAT - fcTL - fdAT -...- fcTL - fdAT - IEND
 単純にIDATチャンクの前にfcTLチャンクが有るかどうかの違いだけですが、fcTLチャンクがIDATチャンクの前に有ればデフォルト画像と1コマ目が兼用できてデータ量が小さくでき、IDATチャンクの前にfcTLチャンクが無ければ1コマ目よりももっとアニメの内容を表す画像をデフォルト画像とする事ができます。

次回はacTLチャンクとfdATチャンクを紹介します。


PNGのチャンク 第4回 PLTEチャンク


こんにちは、きまぐれソフトです。

前回はカラータイプと色深度について説明しましたが、その中のインデックスカラーの時に必須となるPLTEチャンクを紹介します。

インデックスカラーではIDATチャンクに含まれるデータはカラーパレットの番号だけを示し、実際に表示されるべき色の情報は含まれていません。そのためPLTEチャンク内で色番号に対応した表示色を指示する事になっています。

PLTEチャンク


PLTEチャンクには表示色がRGB各1バイトが1組のカラーパレットとなってパレット番号順に格納されます。パレット番号を指定する項目は存在せず、並び順で0番から割り当てられます。
チャンク長は3の倍数でなければエラーファイルとして扱われます。色深度で表現できる大色数まで格納可能で、使われないカラーパレットは切り捨ててチャンクを短くできます。
PLTEチャンクはIDATチャンクよりも前に置かなければなりません。

ここまでで紹介した4つのチャンク(IHDR、IDAT、IEND、PLTE)が仕様上は必須チャンクとされています。これ以外のチャンク(cHRM、gAMA、iCCP、iTXt、sBIT、sRGB、bKGD、hIST、tRNS、pHYs、tEXt、zTXt)は補助チャンクと定義され、ファイル作成時に付加しなくても良く、画像表示時に無視しても構わない事とされています。

補助チャンクの説明に入る前に、次回はAPNG拡張チャンクを紹介します。


2019年3月22日金曜日

新しいiMac(Early2019)が発売されましたね

こんにちは、きまぐれソフトです。

新しいiMacが発表も無く発売されましたね。私はプログラム開発はWindows向けがメインですが、普段使いにはiMacを使用しています。性能アップとなると少し心惹かれます。

さて、昨年の発表会で鳴り物入りで登場したMac miniに性能で追い越され、置いてけぼり感の有ったメインストリームクラスですが、私はインテルのCPU不足が解消するまではモデルチェンジは無い物と思っていました。
それが突然の新型、前触れもなく販売開始で驚きました。
Macのサイレントアップデートなんて久し振りです。

中身の更新はMac miniに合わせたCPUアップデートのみといった感じですが、これでやっと製品ラインのバランスが整ったといったところです。
今年に入ってからインテルの現世代CPU構成にようやく中間クラスが投入されてiMacの6ライン製品群がカバー出来る様になったんですね。他に1ラインだけ旧モデルが継続販売ですけど。

CPU構成的には一つのコンパニオンチップ、多分Z370を中心にCoreブランドの最低ラインから最上位までのフルラインナップといった感じ。
他の構成品は従来と変わらず、1点だけRadeon VEGA GPUが最上位に追加されています。演算性能としてはあまり期待できませんが、メモリがHBM2なので若干の性能向上は有るのでしょう。もっともMacにそこまでのGPUが必要なのかとも思いますが。

次はいよいよMac Proの順番か!?と思わせるiMacの登場でした。

PNGのチャンク 第3回 カラータイプと色深度

こんにちは、きまぐれソフトです。

前回は必須チャンクの説明をしましたが、今回はIHDRチャンクで指定できるカラータイプと色深度について説明します。

色深度はRGB値またはグレースケールを何ビットで表すかが直接格納されていますが、使って良いビット数は決められています。また、カラータイプによって色深度は制限されます。
カラータイプと色深度の許された組み合わせは以下の通りです。
カラータイプ色深度説明
01,2,4,8,16各ピクセルが色深度で指定されたビット数のグレースケール画像。
28,16ピクセルのRGB各色が色深度で指定されたビット数のRGB画像。いわゆるフルカラー。
31,2,4,81600万色中最大256色のインデックスカラー。使用可能色数は色深度で指定。
48,16各ピクセルが色深度で指定されたビット数のグレースケール画像とアルファチャンネル。
68,16ピクセルのRGB各色が色深度で指定されたビット数のRGB画像とアルファチャンネル。

カラータイプが3の時はIDATチャンクが色を直接指定しないので、PLTEチャンクが必要になります。その他のカラー画像の場合もPLTEチャンクを付加する事が許されていますが、通常の使用環境では無視されます。
カラータイプ4と6はアルファチャンネルを持っているので透明部分を作る事が可能です。GIFだとインデックスカラーの内の1色を透明として扱うだけですが、PNGではピクセル単位に透明度を持つ事ができます。
また、カラータイプ3はアルファチャンネルを持ちませんが、各インデックスカラー毎に透明度が指定できます。完全な透明に1色が使える他、限定的ながら半透明が使えます。

次回はPLTEチャンクを紹介します。


2019年3月20日水曜日

PNGのチャンク 第2回 必須チャンク(IHDR、IDAT、IEND)

 
こんにちは、きまぐれソフトです。

前回はチャンクの構造について紹介しましたが、今回からは個別のチャンクをそれぞれ紹介していきます。

今回はチャンクの中でも重要な必須チャンクを紹介します。
必須チャンクには以下の3種類が有ります

  • IHDRチャンク
  • IDATチャンク
  • IENDチャンク
IHDRチャンク

  IHDRチャンクは “Image Header” であり、全てのチャンクの中で先頭に格納されます。データ部には以下の画像情報が格納されています。
  • 幅(ピクセル):4バイト
  • 高さ(ピクセル):4バイト
  • 色深度:1バイト
  • カラータイプ:1バイト
  • 圧縮形式:1バイト
  • フィルター形式:1バイト
  • インターレース形式:1バイト
以上の13バイトです。

幅、高さはそれぞれのピクセル数がそのまま格納されます。
色深度はグレースケールまたはRGB各値のビット数で、8ビットカラーがいわゆるフルカラーです。指定できる色深度はカラータイプ別に決められています。使える色深度は次回説明します。
カラータイプは以下の5種類が指定できます。

  • 0:グレースケール
  • 2:カラー
  • 3:インデックスカラー
  • 4:グレースケール及び透明度
  • 6:カラー及び透明度
圧縮形式、フィルター手法は0のみが使用できます。
インターレースは0(使用しない)と1(Adam7を使用する)の2種類が指定できます。

IDATチャンク


IDATチャンクは “Image Data”であり、画像のビットマップ本体です。IHDRチャンクで指定された色数、サイズ、格納形式でデータが収められます。
規格上、複数のIDATチャンクに分割する事も許されていて、任意のデータ長で区切る事ができます。用途は思いつきませんが、データ長が0バイトのIDATチャンクも存在できます。

IENDチャンク


IENDチャンクはPNGデータの終わりを示すデータ長0バイトのチャンクです。これ以降にデータが続いていてもPNGの表示には影響させない事になっています。

以上の3つが必須であり全てのPNGファイルに含まれています。
次回はカラータイプと色深度について紹介します。




2019年3月18日月曜日

PNGのチャンク 第1回 チャンクの構造

こんにちは、きまぐれソフトです。

以前、アニメーションPNGのチャンク構造を見てみましたが、今回からチャンクの詳細を説明していきます。

初回は全てのチャンクに共通する構造を紹介します。

チャンクは明確な始まりと終わりは無く、ファイルを先頭から読み進めないと何処から何処までが1つのチャンクなのかはっきりしません。決定しているのは1つ目のチャンクがファイルの先頭9バイト目から始まる事だけです。


チャンクはデータ部の長さを表す4バイトで始まり、4バイトのチャンク名、可変長のデータ部、4バイトのCRCで構成されます。つまり、チャンクの長さは開始位置にある4バイトが表す数値+12バイトとなります。

ここで示されるデータ長だけでなく、PNGファイル内で使われる整数値は先頭バイトが上位バイトと指定されています。いわゆるビッグエンディアンです。

CRCはチャンク名とデータ部を連結して計算します。計算式の説明は長くなるので割愛します。
以上が1つのチャンクであり、この直後にまた次のチャンクのデータ長、チャンク名・・・と続いていきます。

次回は必須チャンクについて説明しようと思います。


2019年3月7日木曜日

アニメーションPNGの中身(第4回 チャンクの一覧表示)

こんにちは、きまぐれソフトです。

前回、実ファイルの中身を直接見てみましたが、チャンクが並んでいるのは分かるもののファイルダンプからチャンクの区切りを探すのは容易では有りません。今回はチャンクを一覧表示してみます。

ツールとしてAPNGChecker!を使用します。バージョン2であればチャンクの一覧表示ができます。

先ずはAPNGChecker!でアニメーションPNGの内容を表示させます。
次にPNGのプレビューを2回ダブルクリックします。2回です。
すると「制御データのみ表示」のチェックボックスが表示されるので、チェックを外します。

これでチャンクが一覧表示されます。きっとたくさんのチャンクが入っていて画面外にはみ出している事でしょう。

右にAPNGChecker!の表示例を掲載して有ります。チャンクが多いので、fcTLとfdATを繰り返す部分を省略して有ります。

表示されているチャンクは以下の通りです。APNGファイルによっては違うチャンクが有ったり一部チャンクが無かったりします。

IHDR 画像サイズ、カラーモード他
pHYs 物理的なサイズ
tEXt コメント
acTL 繰り返し回数、コマ数
IDAT 画像データ(今回はまだfcTLが出てないので再生には使いません)
fcTL 次のコマを何秒間、どの位置に表示するか
fdAT 次に表示する画像データ



tEXt コメント(どの位置に何個配置しても良い)
IEND PNGデータの終端。繰り返し再生する場合は最初に戻って再生します。

APNGChecker!の通常表示では上記のfcTLチャンクを拾ってきてフレームレートとフレーム数を表示しています。

APNGBuilderを簡易公開しました


こんにちは、きまぐれソフトです。

APNGBuilderを簡易公開しました。
APNGBuilder の実行画面
機能追加の途中ですが、制限付きながらもアニメーションPNGが作成できます。

アニメーションのコマと各コマの表示時間が一覧表示されます。
アニメーションPNGに合成すると問題が起きそうなコマにはErrorr欄に内容が表示されます。

アニメーションの速度にメリハリが付け易いと思います。使い勝手の悪い所が残ってますが、無料ですので是非試してください。

APNGBuilderのダウンロードページ(https://www.vector.co.jp/soft/winnt/art/se519443.html)

〜〜〜使い方
◯インストール
配布ファイルを解凍するとプログラムが入ったフォルダが作成されます。任意のフォルダに移動して利用できます。

 ◯アニメーションPNGファイルを作る 画面にPNGファイルをドラッグアンドドロップしてアニメーションのコマを追加します。
不要なコマは一覧の左端空欄をクリックして(色が付きます)、キーボードの [Delete]キーを押します。
[...] ボタンを押して保存先を指定したら [作成] ボタンを押してファイルを作成します。

◯アンインストール
APNGBuilder.exe他、配布ファイルに入っていたファイルを削除してください。

APNGBuilderのダウンロードページ(https://www.vector.co.jp/soft/winnt/art/se519443.html)

APNGChecker! バージョンアップ

こんにちは、きまぐれソフトです。

APNGChecker! がVer2.0にバージョンアップしました。変更点は以下の通りです。

  • フレームレート別だったループ時間に、トータル時間が追加されました。
  • ラインスタンプ向けの簡易チェックが付きました。メニューから選択すると違反項目に色が付きます。
  • 普段は邪魔なので隠してますが、全てのチャンクを表示するモードが有ります。
  • 広告付きの無料版と広告無しの有料版に別れました。
ダウンロードはベクターからどうぞ。

または

2019年3月6日水曜日

「互換性」の上位下位

こんにちは、きまぐれソフトです。

USB4が暫定発表されましたね。USB3.1 Gen2から比べると一気に4倍、まだ対応機器を聞いた事の無いUSB3.2 Gen2x2と比べても2倍の転送速度です。凄い性能向上です。ていうか、Thunderbolt3そのものじゃないですか。
新しい世代番号を付けて、長ったらしい規格名とはおさらばです。

閑話休題。
今日のエントリーは「互換性」についてです。USBの発表があちこちのニュースサイトに掲載される中、1社だけ気になる記載が有りました。
USB4はUSB2.0の下位互換と掲載されていました。
そんな馬鹿な、USB2のサブセットなんて!と思いましたが、プレスリリースを読むと旧規格やサンボル3とは "Backward compatibility”、後方互換と記載されています。一安心です。
ニュースサイトのUSB4の説明。
40Gバイト毎秒、表示プロトコル、USB2.0の下位互換

と言うわけで、互換性とは
「下位互換」 一部機能が共通利用できる。
「上位互換」全ての機能が使える上、新機能が有る。
「後方互換」旧世代が使える。
「前方互換」新世代でも使える。
の使い分けが重要です。プログラムのバージョンアップでは後方互換が一番気を付けなきゃいけない所ですね。

技術系のニュースサイトには技術畑のライターを使って欲しいところです。
ところで、上位互換と下位互換のあべこべに使いそうな言い回しって日本語独特の物なんでしょうか。