|
||||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 内部クラス | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
JPEGEncodeParam は、JPEG データストリームの符号化の制御に必要なテーブルおよびオプションをカプセル化します。パラメータは、符号化用にアプリケーションによって明示的に設定されるか、または別の JPEG ヘッダから読み取られます。
BufferedImage の操作を行う場合、codec は、符号化された JPEG COLOR_ID を BufferedImage 内の ColorModel に一致させようとしますが、常にこれが可能であるとは限りません。デフォルトのマッピングを以下に示します。サポートされていない変換が必要な場合、または不当なイメージカラー領域が使われている場合は、ユーザは、イメージデータを既知の ColorSpace に変換するか、またはラスタからデータを符号化する必要があります。ラスタを符号化する際は、カラー領域の調整は行われないので、符号化された COLOR_ID を得るのに必要な変換をすべて独自に行う必要があります。 符号化されるイメージの COLOR_ID は、Huffman テーブルおよび量子化テーブルやサブサンプル用因数のための JPEG codec の初期値の制御に使われます。また、COLOR_ID は、最良の符号化を得るために、どのカラー変換を実行するかを決定する際にも使われます。
注: ここに記述されているカラー ID は、JPEG codec によるデータ処理に影響を与える、単純に列挙された値です。JPEG 圧縮は、定義上色を区別しません。これらの値は、JPEG データの圧縮解除の際のヒントとして使われます。JPEG codec は、これらの値を使って、より高い圧縮率の取得に役立つ領域にデータを移動することができます。
動作の例を以下に示します。これらのマッピングは将来変更される可能性があるので、JPEGImageEncoder.getDefaultParamBlock の呼び出しを使って、特定の BufferedImage に対する encodedColorID を確認することを強くお勧めします。 極端な場合、ユーザがイメージを目的のカラー領域に変換して、Raster から符号化する必要があります。この場合 API プログラマは、Raster のデータのカラー ID を指定しなければならず、カラー変換は行われません。
符号化: BufferedImage タイプ/インスタンス JPEG (符号化された) カラー ID ======================== ======================= TYPE_GRAY COLOR_ID_GRAYSCALE TYPE_RGB COLOR_ID_YCbCr TYPE_YCbCr COLOR_ID_YCbCr TYPE_YCbCr/CS_PYCC COLOR_ID_PYCC TYPE_CMYK COLOR_ID_CMYK TYPE_RGB (alpha) COLOR_ID_YCbCrA TYPE_YCbCr (alpha) COLOR_ID_YCbCrA TYPE_YCbCr/CS_PYCC (alpha) COLOR_ID_PYCCA Any Other ** COLOR_ID_UNKNOWNBufferedImage 変換よりも詳細な制御を行う場合は、ユーザは、Raster からデータを符号化しなければなりません。この場合、データに対してカラー変換は行われません。ユーザが目的の変換を実行する必要があります。
APP0_MARKER を含めることによって JFIF イメージを記述する場合は、符号化された COLOR_ID は、COLOR_ID_UNKNOWN、COLOR_ID_GRAYSCALE、COLOR_ID_YCbCr、または COLOR_ID_CMYK のうちのどれかです。ほかのすべてのインスタンスでは、ImageformatException がスローされます。
重要: Alpha RGB BufferedImage は、有効な JFIF ストリームにマップされません。JFIF ファイルが必要な場合は、符号化の前に Alpha を除く必要があります。APP0 が設定されているのに Alpha が除かれていないと、ImageFormatException がスローされます。
com.sun.image.codec.jpeg パッケージ内のクラスは、コア Java API の一部ではありません。これらは、Sun の JDK および JRE の配布の一部です。ほかのライセンス保有者がこれらのクラスを配布する可能性はあります。ただし、開発者は、これらのクラスが Sun 以外の実装で利用できると想定して作業することはできません。将来的には、同等の機能がコア API または標準の拡張機能で利用できるようになる予定です。
メソッドの概要 | |
void |
addMarkerData(int marker,
byte[] data)
マーカに関連付けられた byte[] の配列に data を追加します。 |
Object |
clone()
|
void |
setACHuffmanComponentMapping(int component,
int table)
コンポーネントとその AC Huffman テーブルとの間のマッピングを設定します。 |
void |
setACHuffmanTable(int tableNum,
JPEGHuffmanTable huffTable)
AC Huffman コーディングテーブルのインデックスを、指定されたテーブルに設定します。 |
void |
setDCHuffmanComponentMapping(int component,
int table)
コンポーネントとその DC Huffman テーブルとの間のマッピングを設定します。 |
void |
setDCHuffmanTable(int tableNum,
JPEGHuffmanTable huffTable)
DC Huffman コーディングテーブルを、指定されたテーブルへのインデックス値に設定します。 |
void |
setDensityUnit(int unit)
ピクセルサイズの単位を設定します。 |
void |
setHorizontalSubsampling(int component,
int subsample)
指定されたコンポーネントに対する水平方向のサブサンプル因数を設定します。 |
void |
setImageInfoValid(boolean flag)
ParamBlock のテーブル情報が有効であることを示すフラグを設定します。 |
void |
setMarkerData(int marker,
byte[][] data)
出力データストリームに書き込まれるマーカデータを設定します。 |
void |
setQTable(int tableNum,
JPEGQTable qTable)
渡されたインデックス値で係数量子化テーブルを設定します。 |
void |
setQTableComponentMapping(int component,
int table)
コンポーネントとその量子化テーブルとの間のマッピングを設定します。 |
void |
setQuality(float quality,
boolean forceBaseline)
現在インストールされている量子化テーブルと置き換わる、新しい量子化テーブルを生成します。 |
void |
setRestartInterval(int restartInterval)
再起動ごとに MCU を設定するか、再起動マーカがない場合には 0 を設定します。 |
void |
setTableInfoValid(boolean flag)
ParamBlock のイメージ情報の有効性を示すフラグを設定します。 |
void |
setVerticalSubsampling(int component,
int subsample)
与えられたコンポーネントに対する垂直方向のサブサンプル用因数を設定します。 |
void |
setXDensity(int density)
水平方向のピクセル密度を設定します。 |
void |
setYDensity(int density)
垂直方向のピクセル密度を設定します。 |
メソッドの詳細 |
public Object clone()
JPEGDecodeParam
内の clone
Object
内の clone
public void setHorizontalSubsampling(int component, int subsample)
component
- 指定されているコンポーネントsubsample
- 指定されているサブサンプル用因子public void setVerticalSubsampling(int component, int subsample)
component
- 指定されているコンポーネントsubsample
- 指定されているサブサンプル用因子public void setQTable(int tableNum, JPEGQTable qTable)
qtable
- 使用される係数量子化テーブルtableNum
- 設定されるテーブルのインデックスpublic void setDCHuffmanTable(int tableNum, JPEGHuffmanTable huffTable)
huffTable
- インデックス tableNum に割り当てられる JPEGHuffmanTabletableNum
- 設定されるテーブルのインデックスIllegalArgumentException
- tableNum が範囲外の場合にスローされる。インデックスは 0 〜 3 の範囲の値である必要があるpublic void setACHuffmanTable(int tableNum, JPEGHuffmanTable huffTable)
huffTable
- インデックス tableNum に割り当てられる JPEGHuffmanTabletableNum
- 設定されるテーブルのインデックスIllegalArgumentException
- tableNum が範囲外の場合にスローされる。インデックスは 0 〜 3 の範囲の値である必要があるpublic void setDCHuffmanComponentMapping(int component, int table)
component
- マッピングを設定するコンポーネントtable
- コンポーネントで使用する DC Huffman テーブルpublic void setACHuffmanComponentMapping(int component, int table)
component
- マッピングを設定するコンポーネントtable
- コンポーネントで使用する AC Huffman テーブルpublic void setQTableComponentMapping(int component, int table)
component
- マッピングを設定するコンポーネントtable
- コンポーネントで使用する量子化テーブルpublic void setImageInfoValid(boolean flag)
public void setTableInfoValid(boolean flag)
public void setMarkerData(int marker, byte[][] data)
marker
- データを設定するマーカdata
- 書き込まれる新しいデータセットpublic void addMarkerData(int marker, byte[] data)
marker
- インスタンスを追加するマーカdata
- 記述されるデータpublic void setRestartInterval(int restartInterval)
restartInterval
- 再起動マーカごとの MCU 数public void setDensityUnit(int unit)
units
- DENSITY_UNIT_* 値の 1 つpublic void setXDensity(int density)
desnity
- 水平方向のピクセル密度 (JPEGDecodeParam.getDensityUnit()
に記述された単位)public void setYDensity(int density)
density
- 垂直方向のピクセルの密度 (JPEGDecodeParam.getDensityUnit()
に記述された単位)public void setQuality(float quality, boolean forceBaseline)
品質レベルが 1.0 のテーブルでは、すべての値が 1 で、量子化によってデータが失われることはありません。ただし、クロミナンスサブサンプリングを使用した場合、および DCT 内の四捨五入エラーにより、いくぶんイメージが劣化します。
標準クロミナンス量子化テーブルのリニアな指標値を、以下に示します。
ガイドライン: 0.75 高品質 0.5 標準品質 0.25 低品質
quality
- 0.0 〜 1.0 の範囲で目的の品質レベルを設定するforceBaseline
- ベースライン量子化テーブルを強制する
|
||||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 内部クラス | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |