ImageConverterクラスを見て、BufferedImageを8ビットカラーに変換する方法を見つけようとしましたが、これをどうやってやるのか分かりません。私もインターネットの周りを検索していましたが、私は単純な答えは見つけられませんでした。彼らはすべて8ビットのグレースケール画像を話していました。私は単純に画像の色を8ビットに変換したいと思っています...他には何もありません。誰かが私にこのことをする方法を教えてくれますか?BufferedImageを8ビットに変換するには?
8
A
答えて
2
うまく機能"Transparent gifs in Java" at G-Man's Uber Software Engineering Blog記事からこのコードスニペット:
public static void main(String[] args) throws Exception {
BufferedImage src = convertRGBAToIndexed(ImageIO.read(new File("/src.jpg")));
ImageIO.write(src, "gif", new File("/dest.gif"));
}
public static BufferedImage convertRGBAToIndexed(BufferedImage src) {
BufferedImage dest = new BufferedImage(src.getWidth(), src.getHeight(), BufferedImage.TYPE_BYTE_INDEXED);
Graphics g = dest.getGraphics();
g.setColor(new Color(231, 20, 189));
// fill with a hideous color and make it transparent
g.fillRect(0, 0, dest.getWidth(), dest.getHeight());
dest = makeTransparent(dest, 0, 0);
dest.createGraphics().drawImage(src, 0, 0, null);
return dest;
}
public static BufferedImage makeTransparent(BufferedImage image, int x, int y) {
ColorModel cm = image.getColorModel();
if (!(cm instanceof IndexColorModel))
return image; // sorry...
IndexColorModel icm = (IndexColorModel) cm;
WritableRaster raster = image.getRaster();
int pixel = raster.getSample(x, y, 0); // pixel is offset in ICM's palette
int size = icm.getMapSize();
byte[] reds = new byte[size];
byte[] greens = new byte[size];
byte[] blues = new byte[size];
icm.getReds(reds);
icm.getGreens(greens);
icm.getBlues(blues);
IndexColorModel icm2 = new IndexColorModel(8, size, reds, greens, blues, pixel);
return new BufferedImage(icm2, raster, image.isAlphaPremultiplied(), null);
}
+0
偉大な作業は、透明部分を削除するだけでした。 –
1
4
これを行うには、公式のSun(現在Oracle)イメージライブラリであるJAI(Java Advanced Imaging)を使用できます。
ColorQuantizerDescriptorには、適用可能な量子化プロセスの選択肢が示されています。
+0
サンプルコードがありますか? http://stackoverflow.com/questions/15312921/how-to-use-colorquantizerdescriptor –
関連する問題
- 1. VHDLで8ビットを16ビットに変換するには?
- 2. RGB565をグレースケール(8ビット)に変換する
- 3. 16ビット深度CvMat *を8ビット深度に変換する
- 4. 16ビットpcmを8ビットに変換する
- 5. Javaで16ビット.tiffイメージを8ビット.tiffイメージに変換するには?
- 6. 8ビットから16ビットへの変換
- 7. 8ビットPNGをアルファで32ビットに変換
- 8. 8ビット符号なしPCMを8ビット符号付きPCMに変換
- 9. Java - ファイル[]アイテムをBufferedImageに変換する
- 10. データURLをBufferedImageに変換する
- 11. delphiはmicrosoftバイナリをieee(8ビット)に変換します
- 12. ビットマップ(RGB_565)をグレースケール(8ビット)に変換する
- 13. Pythonバイトを「符号なし8ビット整数」に変換する
- 14. OpenCV 2で8ビットイメージを32ビットに変換する
- 15. C# - 8ビットまたは16ビットのグレースケール生のピクセルデータを変換する
- 16. 8ビットのバイトを6ビットの文字に変換するにはどうすればよいですか?
- 17. matlabの16ビットR G B値を8ビットR G B値に変換するには?
- 18. Graphics2DをImageまたはBufferedImageに変換する
- 19. BufferedImageをイメージにキャスト/変換する方法は?
- 20. BufferedImageをPrintableに変換してprintJobを使用する方法
- 21. Pythonの5 8ビット変数に4 9ビットと1 4ビットのint変数をパックする方法は?
- 22. ビットを値に変換する
- 23. BufferedImageをimgに変換する際の問題
- 24. OpenCVを使用して12ビットのBayer画像を8ビットRGBに変換する
- 25. UnicodeコードポイントをUTF-8に変換する
- 26. UTF-8をUkranianエンコーディングに変換する
- 27. 32ビットの数値を16ビット以下に変換する
- 28. 32ビットdllを64ビットdllに変換する
- 29. この機能を使用してBufferedImageをMatに変換しようとすると、BufferedImageをOpenCVのMatに変換する
- 30. Matlabのビット配列を整数に変換するには?
はおそらくすなわち、量子化アルゴリズムを選択する必要があります。あなたの画像の色の範囲を256エントリのパレットに変換するもの。 – PhiLho
画像の色を8ビットに変換するとどういう意味ですか?私はあなたが色空間を減らしたいと思いますか?カラー量子化を実行しますか? – Behe
あなたは私にライブラリ/ APIを教えてもらえますか?あなたが何を言っているのか分かりません。私は自分のパレットを作ることができるようにも思えますが、これはできるだけ良くなるでしょう。 –