| 2.x | 追加レート適応性のあるプログレッシブJPEG(PJPEG)および生き生きしたGIF支援。 さらに、カスタム・パレット支援は、ウインドウズ(8ビットのハードウェア・パレットはそれの中で表示されたイメージに一致した)のために加算しました。 |
| 3.x | ジャバスクリプトからのイメージのジャバスクリプトを抑制されたロードを許可する小銭。 |
| 4.x | より清潔なAPIのために部分的に書き直されたImagelib。 スケジュール圧力の結果として、カスタム・パレット支援は無効になりました。 |
レイアウトは、得るリクエストを出します、/、イメージ図書館用のクライアントとしてイメージURLを表示します。 例えば、リクエストは、HTMLタグ<img src=foo.gif>から来ることができました。あるいは、「視界イメージ(View Image)」は要求します。
イメージ図書館は、イメージ・リクエストがどう元来生成されたか注意しません。 それは、それがプロセスに対して十分に持つまでそれをバッファーして、指定されるすべてのデータ流れからデータを受理します。
イメージ図書館の主要な入り口は関数IL_GetImage()です。 レイアウトは、ns/lib/レイアウト/layimage.cの中のlo_GetImage()によってIL_GetImageを呼びます。 IL_GetImage()は、IL_ImageReqと呼ばれるデータ構造を返します。 同じイメージの多数の要請は同じhtmlページになされるかもしれませんが、ユニークなIL_ImageReqハンドルはすべてのリクエストのために生成されます。
これは、イメージが各リクエストのためにデコードされるに違いないことを意味しません。 単一のイメージURLはページの用いられている無数の回かもしれません。 以前にデコードされたイメージおよび分類されたイメージのキャッシュは維持されます。また、各イメージの情報はimage_containerと呼ばれるデータ構造で維持されます。 イメージ・リクエストが出される場合、imagelibは一致するimage_containerを見つけるためにキャッシュによって探索します。 それが一致するコンテナーを見つける場合、それは以前にデコードされたデータを使用します。 そうでなければ、それはイメージ・データをデコードし、将来の使用のためのイメージ・キャッシュに加えられる新しいイメージ・コンテナーを作成します。
イメージ・オブザーバーはイメージ・リクエストのために作成されます。
オブザーバーは下記のような、image_requestステータスおよび状態をモニターするように設計されたメカニズムです:
- イメージの進行
- イメージpixmapは更新されました。
- イメージはデコードし終えました。
- イメージ/アニメーションの構造はデコードし終えました。
- キャッシュに入れられたイメージはデコードを完成しました。
- イメージ・リクエストは破壊されました。また、オブザーバー・リストは掃除の準備ができます。
イメージのヘッダーが読まれており、イメージの自然な次元および目標次元が理解される後、それがラインの価値のデータを持つまで、イメージ図書館はデコードします。 デコードされたデータは、目標イメージ・サイズにサイズ変更されます。 透明マスクが存在する場合、マスクはさらに目標イメージ・サイズにサイズ変更されます。 いかなる変形も目標色深さと一致する必要があった、さらにここに生じます。
イメージlibaryはラインによってブロックによってではなくイメージに対処します。 フロント・エンド・ディスプレイの準備ができているラインは関数IL_DisplaySubImage()経由で、フロント・エンドに送られます。
イメージがデコードし終えたことをオブザーバーが悟る場合、掃除する、生じることができます。 清潔、を上へ、しかしながら、ページがアンロードされるまで、生じません。 1位、イメージ・リクエストが破壊されます。 イメージ・コンテナーが破壊されます。 イメージ・グループ・コンテナーは最後に破壊され、イメージ構造がすべて解放されると保証します。
各イメージについては、イメージ・コンテナーが各減圧されたかまたは分類されたイメージのために作成されます:
il_container_struct(ns/モジュール/libimg/src/if.hの中の)
クライアント(レイアウト)がイメージを表示してくれるようにイメージ図書館に依頼するごとに、新しいイメージ・リクエストハンドルはIL_GetImage()によって生成されます:
IL_ImageReq(ns/モジュール/libimg/src/if.hの中の)
image_struct:
IL_Image_struct(ns/モジュール/libimg/src/il.hの中の)
ファイルif.cの中の関数il_first_write()は始めます、その、vtable、またそれを付ける、に、その、新しいイメージ用のimage_container。
最初に、それはデータ流れに新しく作成されたイメージ・コンテナーを関連させます。
イメージ・フォーマット・タイプを決定した後に、それはそのイメージ・タイプのために仮想テーブルに5つの機能を帰します。
ケースIL_JPEG:
init=il_jpeg_init;
ic>-書き込み=il_jpeg_write;
ic>-中断=il_jpeg_abort;
ic>-=il_jpeg_completeを完成する;
壊れます;
デフォルト:
ILTRACE(1(「il」:無視する未知のイメージ・タイプ(%d)(ic):―タイプ>));
MK_IMAGE_LOSSAGEを返します;
}
/*終了例*/
imagelibが使用するvtableな類似のインターフェースは、JMC(ネットスケープで内部にしばらくの間使用されましたが、そのイントロダクションの直後に放棄されたコンポーネント化スキーム)を使用して、現在インプリメントされます。 それが構造プロセスに多くの不必要な複雑さを加えて、JMCツールが今後支援されないだろうとともに、JMCのいかなる使用も消去されるべきです。 理想的には、新しいimagelibインターフェースは移動されるべきです、次世代pluginで開始されているCOM状のコンポーネント化スキーム、5.0にコード化します。
わきに、核心(クロス・プラットフォームimagelib機能性)をモジュール化する問題から、個別の問題があります、スクリーン上のイメージ・ピクセルを現実に引く、プラットフォーム特定のコードは、現在各プラットフォーム内に存します、フロントエンド、例えば、ウインドウズのためのコードはns/cmd/winfeディレクトリーの中にあります。 (さらにポストスクリプトがあります、ポストスクリプト・プリンタ上の魔法使いの印刷には「フロントエンドの。」)。 このコードは、多少各platformsの在来の小型装置およびクラスと無料で絡み合った傾向があります。 このイメージを引くコードは分離され、imagelib(「md」は立っています、のために、依存の依存する)の内の「md」ディレクトリーに置かれるべきです。 再び、最終ゴールは、imagelib開発を合理化するためにimagelibおよび小さな接着剤コードだけを使用して、3つのプラットフォームの各々用にスタンド・アロンのイメージ・ビューアーを建造することです。
X11の上に、パレット中の任意の既存の色に適合することは可能に違いありません。 既存のバージョンでは、navが、RGB色の規則的な格子を割り付けることを試みます(「色立方体」)。 しかしながら、立方体の8つの「買い占め」色、立方体内部中の色の任意のよく分配されたセットと結合した、ディザリングの合理的なレベルを提供するべきです。
理想的には、216-色立方体を割り付けるべきである、しかしそれが可能でない場合...
はるかによいシステムは、低いメモリ状況に遭遇する場合は常に、呼ばれるimagelibへエントリーポイントを露出するでしょう。 このコードは、最近表示されていないか、スクリーン上で目に見えないイメージに対するpixmap記憶力を除去することを試みるでしょう。 たとえイメージpixmapが廃棄されても、それを改造するのに必要な情報をすべて維持することができるかもしれません、つまりイメージの出所URL、イメージ次元など リクエストが除去されたイメージを表示するためになされた場合、imagelibは再度それを取って来て、それを再デコードするでしょう。