2009-02-26 10 views

答えて

3

http://java.sun.com/javase/6/docs/api/javax/imageio/package-summary.html#gif_plugin_notes

注意愚かな(私はそれが最後の1 :)だ推測している)されています。

あなたがbasicly、GIFとして保存されていないやるべきこと:INYの答えに拡大すること

+0

umm ...私はそこに何を見ているのか分かりません...あなたに意味があるとすれば、私はあなたがこれを命令または2つに翻訳するほど親切ではないと思います。実際に "やって"いるはずですか? –

+0

あなたは何を得ているのか分かりません。 RGB画像をGIFに保存するだけでは、別の種類の画像を使用できますか? – iny

5

。 GIFは256色の色付き画像です(したがって、ファイルサイズは小さくなります)。画像の色が256色を超える場合は、保存する前に色を256にダウンサンプリングしてください。何をすべきか分からないので、エンコーダはあなたのためにそれをしません。それはおそらくイメージの書き込みを開始し、一度256色を超えると、ただ壊れてしまいます。

描画コードは、あなたがそれについて何も考えずに色深度を増加させること、見栄えするアンチエイリアスを使用している場合、私はあなたがkindofが、この(擬似コード)のような

// Create the buffered image. 
BufferedImage bufferedImage = new BufferedImage(w,h,BufferedImage.TYPE_INT_RGB); 

... //fill image data (works fine) 

ImageIO.write(bufferedImage, "JPG", f1); // works fine 

ImageIO.write(bufferedImage, "PNG", f2); //works fine 

// downsample to lower color depth by using BYTE_RGB? 
BufferedImage crappyImage = new BufferedImage(w,h,BufferedImage.TYPE_BYTE_RGB); 
crappyImage.getGraphics().drawImage(bufferedImage, 0, 0, w, h, null); 
// or you could repeat the drawing code above with less colors 


if (!ImageIO.write(crappyImage , "GIF", f3)) 
{ 
    //still too many colors 
    f3.delete(); 
    showError("Could not save as gif, image had too many colors"); 
} 

をそれを行うことができると思います。たとえば、白い背景にAA線で描かれた斜めの青い線を描くと、Color.WHITEとColor.BLUEの2色が表示されますが、細かく見ると青色の色合いがあります対角線のギザギザの外観。

+0

TYPE_BYTE_RGBはBufferedImageのメンバーではありません。 TYPE_BYTE_INDEXED(javaドキュメントが代わりに提案していると思われる)では、結果に変更は生じません。しかし、私はちょうどgifをスキップし、誰もgifをもう使用しないので、より重要な問題に進むと思います:) –

+0

なぜ私はそれがpsuedocodeだと言ったのか:)それ以外にもTYPE_3BYTE_BGRやTYPE_USHORT_555_RGBのようなものがあります。 最も近いのは、BufferedImageのjavadocsでの読み込みのTYPE_BYTE_INDEXEDです –

関連する問題