2011-11-08 13 views
1

JAIを使用して画像に「境界線」を追加しています。例:JAIを使用すると、パレットに新しい色をどのように追加できますか?

ParameterBlock pb = new ParameterBlock(); 
pb.addSource(r); 
pb.add(leftPad); 
pb.add(rightPad); 
pb.add(topPad); 
pb.add(bottomPad); 

pb.add(new BorderExtenderConstant(consts)); 

r = JAI.create("border", pb); 

上記の 'consts'の値は、ColorModelによって異なります。 ComponentColorModelを使用する場合は、各ピクセルに独自の色がありますので、パレットを混乱させる必要はありません。画像にパレット(GIF、PNG、...)がある場合、ColorModelはIndexColorModelです。

IndexColorModelが使用されている場合、 'consts'はdouble []配列で、サイズは1です。配列内の値はカラーパレットのインデックスです。

新しいIndexColorModelを作成してパレットを修正する方法を見つけましたが、コードを作成するロジックは非常識です! (例えば、パレットでどれくらいの色を使用できるかは、多くの要因によって決まります。また、新しい色を追加するためにパレットから色を削除する必要がある場合は、削除する色を決定するロジックが必要ですその色を参照しているすべてのピクセルを変更する - それは大量のコードです)。

私の質問は、パレットにどのように色を追加するのですか?既存の図書館はありますか?または、私はioimageから何かを使うべきですか? (正直言って、ジャイ "終了"とioimage "開始"のところでちょっと混乱しています)

また、何かの理由で、何かの理由で、パレットに約10色のテスト画像のみが読み込まれます256色あります。 jaiで画像を保存すると、256色すべてが保存されます(11〜255はすべて黒です)。なぜこれをやっているの?

ありがとうございます! David

答えて

0

私が上記の質問に思いついた最善の解決策は、IndexColorModelからComponentColorModelにイメージを変換することです。 (あなたと仕事をしなければならない何のパレットが存在しないので、ComponentColorModelこれの各ピクセルは、独自の色を指定します - あなたは簡単にあなたが好きな色を使用することができます。)

私はこの単純な解決策をカムhttp://java.sun.com/products/java-media/jai/forDevelopers/jaifaq.html#palette

を読んだ後、これは、画像を読んだ後に私がやっていることです:

if(image.getColorModel() instanceof IndexColorModel) { 
    IndexColorModel icm = (IndexColorModel)image.getColorModel(); 
    byte[][] data = new byte[4][icm.getMapSize()]; 

    icm.getReds(data[0]); 
    icm.getGreens(data[1]); 
    icm.getBlues(data[2]); 
    icm.getAlphas(data[3]); 

    LookupTableJAI lut = new LookupTableJAI(data); 

    image = JAI.create("lookup", image, lut); 
} 

一度操作を行うと、画像を元に戻すことができます。私はそれを理解する時間を費やしていない。他の誰かがそれを理解したい場合は、これを読んでみたいです:http://www.java.net/node/675577

関連する問題