Red de conocimiento informático - Aprendizaje de programación - Importe imágenes de clase Java a Excel. El desenfoque es que la imagen está cubierta con una capa de rojo.

Importe imágenes de clase Java a Excel. El desenfoque es que la imagen está cubierta con una capa de rojo.

Cuando Java carga imágenes, algunas imágenes se mostrarán en rojo al escalar, recortar o generar miniaturas. Después de verificar, siempre que se lean a través del método ImageIO.read()() y luego se guarden, las imágenes se volverán rojas. Por tanto, se puede considerar que la causa directa es un problema en el proceso de carga de imágenes mediante el método ImageIO.read().

BufferedImage estática pública getImages(byte[] datos) lanza IOException {

ByteArrayInputStream entrada = new ByteArrayInputStream( datos);

return ImageIO.read(entrada)

}

Después de la revisión, aprendimos que al leer una imagen, es posible que el método ImageIO.read() no maneje correctamente la información ICC de la imagen (esta es la imagen JPEG). formatear un tipo de información de encabezado), lo que da como resultado un color rojizo cuando se representa la imagen. El color de primer plano está cubierto con una capa de rojo. Solución:

Ya no use el método ImageIO.read() para cargar imágenes, sino use Image src=Toolkit.getDefaultToolkit().getImage proporcionado en el JDK

Image src= Kit de herramientas El método .getDefaultToolkit().getImage carga la imagen.

getDefaultToolkit().getImage(file.getPath());

BufferedImage image=BufferedImageBuilder.toBufferedImage(src); //Imagen a BufferedImage

O Toolkit.getDefaultToolkit().

O Toolkit.getDefaultToolkit().createImage

Imagen imageTookit = Toolkit.getDefaultToolkit().createImage(bytes

BufferedImage cutImage = BufferedImageBuilder.toBufferedImage(imageTookit); );

Código fuente de BufferedImageBuilder:

Imagen Buffered pública estática a Imagen Buffered(Imagen de imagen) {

if (instancia de imagen de BufferedImage) {

devolver imagen (BufferedImage)

}

//Toolkit.createImage(bytes

BufferedImage cutImage = BufferedImageBuilder.

/ / Este código garantiza que todos los píxeles de la imagen estén cargados

image = new ImageIcon(image).getImage()

BufferedImage bimage = null

GraphicsEnvironment ge = GraphicsEnvironment

.getLocalGraphicsEnvironment();

prueba {

int transparencia = Transparencia .OPAQUE

GraphicsDevice gs = ge; . getDefaultScreenDevice();

GraphicsConfiguration gc = gs.getDefaultConfiguration();

bimage = gc.createCompatibleImage(image.getWidth(null),

image. getHeight (null), transparencia);

} catch (HeadlessException e) {

//El sistema no tiene pantalla

}

if ( bimage == null) {

// Crea una imagen almacenada en búfer usando el modelo de color predeterminado

int type = BufferedImage.TYPE_INT_RGB

bimage = nueva Imagen Buffered(image. getWidth(null),

image.getHei

ght(null), type);

}

//Copiar la imagen a la imagen del búfer

Gráficos g = bimage.createGraphics(); p> p>

// Dibuja la imagen en la imagen del búfer

g. drawImage(image, 0, 0, null

g.dispose(); /p >

devolver bimagen

}