Tonyuでアルファ付きPNG画像(半透明の情報が付いている画像)を表示するためのライブラリです。
アルファPNGは1枚の画像で、透明・半透明・不透明を表示できます。
しかし、TonyuはアルファPNGに対応していないため、
アルファPNGをそのまま表示しても、不透明な画像として表示されてしまいます。
このライブラリは1枚のアルファPNG画像を表示するために、
透明度の異なるPanelクラスを複数枚重ねて表示することで、
疑似的に1枚のアルファ画像として表示します。
しかし、半透明のパネルを複数枚使っているので、そのままでは処理が重くなってしまいます。
そこで、なるべく処理を軽くするために工夫した方法を使っています。
("特徴"で詳しく説明します)
このライブラリはアルファPNG画像を、上図のように
透明度の異なる複数のパネルで疑似的に表示します。
そのため、最初にパネルを生成し、画像をパネルにコピーする必要があります。
パネルを生成する際に、
どこのドットがどの透明度なのかという情報(アルファチャンネル)が必要になります。
この情報を取り出すために、アルファPNG画像を付属のプログラム
「TonyuAlphaPNGLib(分析器).exe」で分析し、
TALファイルという独自のファイルを作り出します。
TALファイルには、対応するアルファPNG画像の透明度情報などが入っています。
TALファイルはあらかじめ準備しておきます。
ゲーム実行時に、PNG画像とTALファイルを読み込み、アルファ画像用のパネルを作成し用意しておきます。
ライブラリにアルファ画像の表示命令をすると、用意したパネルを使いアルファ画像を表示します。
1.アルファ画像の生成が速い
2.パネルの最大枚数を調節して、処理速度と画質のバランスを調節できる
3.ディザ処理で、少ないパネル数でも元の画像に近い見た目
1.アルファ画像の生成が速い
アルファ画像の生成は、透明度の違うパネルを複数枚用意し、
該当する透明度のパネルに、画像を1ドットずつコピーするという方法で生成します。
アルファ画像の作成が速い理由は、下記の2つの方法を使っているからです。
■処理が軽い「copyRectメソッド」(パネルの画像を別のパネルにコピー)を使っている
■「スーパープロセッサ」の技術を使っている
■パネルに画像をコピーするには、getPixelメソッド(パネルのある1ドットの色を取得)と
setPixelメソッド(パネルの1ドットの色を変更)を使う方法があります。
しかし、この2つのメソッドは処理が重いです。
このライブラリでは、それよりも処理が軽いcopyRectメソッドを使っているので、短時間でアルファ画像を生成できます。
■
スーパープロセッサとは、以前作者が作ったライブラリのことで、
Tonyuのオブジェクトを125,000個まで出しても点滅しないようにするものです。
この技術を応用することで、TALファイルの読み込みが高速になりました。
このライブラリは、TALファイルを読み込みながらアルファ画像を作り上げていくので、
TALファイルの読み込みが高速になれば、アルファ画像の生成も高速になります。
2.パネル最大枚数を調節して、処理速度と画質のバランスを調節できる
アルファPNGの透明度は0〜255の256段階もあります。
TonyuでアルファPNGを表示するためには、パネルを複数枚表示する必要がありますが、
256段階すべてを使っているアルファPNG画像を表示するためには、1〜255の254枚必要です。(0は透明なので表示する必要がない)
しかし、254枚も表示してしまうと処理が重くなって、ゲームの動きがかくかくになってしまいます。
そこで、
パネルの枚数に上限を設ける機能を付けました。
この機能により、
パネルの表示枚数を減らすことができ、処理を軽くすることができます。
例えば、パネル最大枚数を16枚にした場合、パネルが254枚必要なアルファPNG画像はパネル16枚で表示されます。
ただし、256段階ある透明度を無理やり17段階にしているため、画像は劣化します。(減色のようなもの)
見え方と処理速度のバランスを考えて調節してください。
「画像によっては見え方が変わる」「動きの多いゲームは枚数を減らしても目立たない」等があるので、
状況に応じて最大枚数を調節してください。

※ 上図はあくまでも一例です。画像によっては劣化の度合いが変わります。
パネル最大枚数は、アルファ画像作成時に調節できます。
3.ディザ処理で、少ないパネル数でも元の画像に近い見た目
ディザ処理とは、このライブラリでは下図のように
近い透明度のピクセルを分散させて、オリジナルの画像に近づける画像処理のことです。
特徴2で、パネルの表示枚数を減らすと画像が劣化すると述べましたが、
ディザ処理は、その画像劣化を目立たなくする効果があります。
ディザ処理をした場合は、
パネル枚数を少なくしても元の画像からの劣化が少ないように見えます。
よって、表示するパネル枚数を少なくして処理を軽くできます。

※ 上図はあくまでも一例です。画像によっては劣化の度合いが変わります。
ディザ処理を使うと、パネル枚数を減らしつつ、なるべくオリジナルの画像に近い状態で表示できます。
上図の下側の画像2枚は、どちらもパネル数を16枚に減らしているため画像自体は劣化していますが、
左側の方が元画像に近い見た目に見えます。
この機能により画像劣化をなるべく抑えながら、処理の軽量化ができます。

※ 上図はあくまでも一例です。画像によっては劣化の度合いが変わります。
ディザ処理のON,OFFは、アルファ画像作成時に選択できます。
「サンプル」フォルダ内の
■「サンプル01」は、実用的なサンプル
■「サンプル02」は、最小限のプログラムで書かれたサンプル
が入っています。
「ライブラリ本体」フォルダ内の
■「AlphaDxChar」「AlphaPat」「AlphaPatChip」は、ライブラリのTonyuのソース
■「TonyuAlphaPNGLib」は、アルファPNG画像からTALファイルを作り出す実行ファイルです。
- CPU:Core 2 Duo 2GHz 以上
- 使用メモリ:100MB以上
半透明画像をかなり使う場合が多いので、
一昔前の(画面いっぱいの半透明画像1枚の表示で処理落ちするような)PCでは、
かなり処理落ちしてゲームにならない場合があります。(表示するアルファ画像の大きさや表示数による)
メモリは、複数枚パネルを使うので、少ないときは数十MBで済みますが、
大きいアルファ画像を使ったり、パネル枚数を増やしたりすると、100MBを超える場合があります。