Soy nuevo en los gráficos Java (gráficos de computadora en general) y Stack Overflow, así que por favor ayúdenme y ayúdenme a expresar mejor mi problema.BufferedImage no se muestra (todo en negro) pero la imagen se puede mostrar
Por el momento, estoy tratando de mostrar una Imagen Buffered junto a la imagen original en una GUI de Java. Este es mi código:
Image oriImage = robot.getQwerkController().getVideoStreamService().getFrame(); //load the original image
Graphics2D hi = bufferedImage.createGraphics();
hi.drawImage(oriImage, 0,0, null); //draw the original image into the BufferedImage
hi.dispose();
images[0].put(oriImage, 1); //draws the original image in the first frame
images[1].put(bufferedImage, 2); //draws the BufferedImage in the second frame
y el "puesto" función es la siguiente:
public synchronized void put(Image image, int frameNumber) {
icon.setImage(image); //sets the image displayed by this icon
display.paintImageIcon(icon, frameNumber); //paint the image onto the gui
imageSet = true;
notifyAll();
}
Sin embargo, la interfaz gráfica resultante es la siguiente
Así que los trabajos de imagen , pero BufferedImage no. Supongo que funciona porque BufferedImage es una subclase de Image ... ¿Alguna idea? Por favor, hágamelo saber si se necesita código adicional ~ Gracias de antemano :)
EDIT 1:
Hice algunas pruebas, y en lugar de utilizar la imagen original, que creó toda una nueva BufferedImage, y se utiliza para Graphics2D dibuja una línea y luego intenta mostrarla. aquí está el resultado:
por lo que funciona. Por lo tanto, debe haber algo mal con la imagen original (o la conversión que sucedió)
EDIT 2: Hice una cosa similar con bufferDamage y trazó una línea. El resultado es el mismo que EDIT 1, y por lo tanto, creo que hay algún problema con la función drawImage.
EDIT 3: Resolví el problema poniendo un bucle while en el drawImage para completar el dibujo de la imagen (porque devuelve false si aún no ha terminado de dibujar una imagen) y funcionó. : D
boolean x = false;
while (!x) {
x = hi.drawImage(oriImage, 0,0, null); //draw the original image into the BufferedImage
}
¿Puedes por favor publicar el código de cómo creaste inicialmente el objeto 'bufferedImage'. – cgull
'// carga la imagen original' Sincrónicamente (espera hasta que cargue la imagen) o asincrónicamente (el código continúa mientras se carga la imagen)? Para una mejor ayuda antes, publique un [SSCCE] (http://sscce.org/). –
Lo haría si pudiera publicar un SSCCE, el problema es que todo el proyecto es bastante grande y muchos de los códigos son irrelevantes para el problema. (La imagen que obtenemos ahora proviene de una cámara web que está cargada en un robot) Sin embargo, voy a editar para obtener más información. ¡Gracias! –