Estaba mirando la clase ImageConverter, tratando de ver cómo convertir una imagen BufferedImage a 8 bits, pero no tengo idea de cómo iba a hacer esto. También buscaba por Internet y no encontré una respuesta simple, todos hablaban de imágenes en escala de grises de 8 bits. Simplemente quiero convertir los colores de una imagen a 8 bits ... nada más, no cambiar el tamaño sin nada. ¿Alguien le importa decirme cómo hacer esto?Cómo convertir una imagen Buffered a 8 bit?
Respuesta
Este fragmento de código del artículo de "Transparent gifs in Java" at G-Man's Uber Software Engineering Blog funciona bien:
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);
}
Funcionó muy bien, solo tuvo que quitar la parte de transparencia. –
Puede usar JAI (Java Advanced Imaging), la biblioteca oficial de imágenes de Sun (ahora Oracle) para hacer eso.
El ColorQuantizerDescriptor muestra la elección de los procesos de cuantificación que puede aplicar.
¿Tiene algún código de muestra? http://stackoverflow.com/questions/15312921/how-to-use-colorquantizerdescriptor –
- 1. Cómo clonar una Imagen Buffered
- 2. Convertir imagen Buffered en byte [] sin I/O
- 3. Dibujar líneas múltiples en una Imagen Buffered
- 4. En Java, ¿es posible convertir una Imagen Buffered a un URI de Datos IMG?
- 5. Convierta un Graphics2D en una Imagen o Imagen Buffered
- 6. ¿Cómo obtener un InputStream desde una Imagen Buffered?
- 7. ¿Cómo puedo mostrar una Imagen Buffered en un JFrame?
- 8. ¿Cómo obtener una Imagen Buffered desde un Componente en Java?
- 9. Cómo guardar una Imagen Buffered como un Archivo
- 10. Bit Hack - Redondee a múltiples de 8
- 11. C# convertir bit a booleano
- 12. ¿Cómo convertir una imagen IplImage * OpenCV de 8 bits a una IplImage * de 32 bits?
- 13. Cómo convertir una imagen JPG a PNG
- 14. ¿Cómo convertir una imagen a codificación base64?
- 15. ¿Cómo convertir un pdf a una imagen?
- 16. ¿Convertir una imagen a XAML?
- 17. Crear una imagen Buffered desde el archivo y hacerla TYPE_INT_ARGB
- 18. Cómo convertir caracteres especiales a UTF-8?
- 19. Convertir 32 bit dll a 64 bit dll
- 20. Cómo convertir una cadena a utf-8 en Python
- 21. Convertir GB2312 a UTF-8
- 22. Convertir profundidad de 8 bits CvMat * a 8 bits de profundidad
- 23. ¿Convertir imagen a binario?
- 24. OpenCV: cvLoadImage abre una imagen de 16 bits como 8-bit
- 25. Convertir la columna de bit a entero
- 26. Cómo convertir UTF-8 a US-Ascii en Java
- 27. Cómo convertir un LinearLayout a la imagen?
- 28. Cómo convertir una página web html a una imagen
- 29. Cómo convertir bytearray a imagen o imagen a bytearray?
- 30. PIL: ¿Convertir imagen RGB a una paleta específica de 8 bits?
es probable que tenga que elegir un algoritmo de cuantificación, es decir. algo que transforma el rango de colores de sus imágenes en una paleta de 256 entradas. – PhiLho
¿A qué te refieres con convertir los colores de una imagen a 8 bits? Supongo que quieres reducir el espacio de color? ¿Desea realizar la cuantización del color? – Behe
¿Podrían apuntarme a una biblioteca/API de algún tipo? No tengo idea de lo que estás hablando. Eso también parece que podría crear mi propia paleta, que sería mejor si fuera posible. –