Jestem nowicjuszem w grafice Java (grafika komputerowa w ogóle) i Stack Overflow, więc proszę pomóżcie mi i pomóżcie mi lepiej sformułować mój problem.Obraz buforowany nie wyświetla się (cały czarny), ale może zostać wyświetlony obraz
W tej chwili próbuję wyświetlić BufferedImage obok oryginalnego obrazu w GUI Java. To jest mój kod:
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
i "put" funkcja jest następująca:
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();
}
Jednak uzyskany GUI jest następująco
tak więc prace wizerunku , ale BufferedImage tego nie robi. Zakładam, że działa, ponieważ BufferedImage jest podklasą obrazu ... Każdy pomysł? Proszę dać mi znać, jeśli jest potrzebny dodatkowy kod ~ Z góry dzięki :)
EDIT 1:
Zrobiłem kilka testów, a zamiast używać oryginalnego obrazu, I stworzył zupełnie nowy BufferedImage i wykorzystywane do Graphics2D narysuj linię, a następnie spróbuj ją wyświetlić. oto wynik:
Tak to działa. Dlatego coś musi być nie tak z oryginalnym obrazem (lub konwersją, która się wydarzyła)
EDIT 2: Zrobiłem podobną rzecz z bufferedImage i narysowałem linię. Wynik jest taki sam jak EDIT 1, dlatego myślę, że istnieje pewien problem z funkcją drawImage.
EDYCJA 3: Rozwiązałem problem poprzez umieszczenie pętli wokół rysowania, aby umożliwić wykonanie rysunku (ponieważ zwraca on wartość false, jeśli nie zakończyło jeszcze rysowania obrazu) i zadziałało! : D
boolean x = false;
while (!x) {
x = hi.drawImage(oriImage, 0,0, null); //draw the original image into the BufferedImage
}
Czy możesz opublikować kod opisujący początkowo tworzenie obiektu 'bufferedImage'. – cgull
'// wczytaj oryginalny obraz' Synchronicznie (czeka na załadowanie obrazu) lub asynchronicznie (kod jest kontynuowany podczas ładowania obrazu)? Aby uzyskać lepszą pomoc wcześniej, opublikuj [SSCCE] (http://sscce.org/). –
Chciałbym, gdybym mógł opublikować SSCCE, problem polega na tym, że cały projekt jest dość duży i wiele kodów nie ma związku z problemem. (Obraz, który otrzymujemy teraz, pochodzi z kamery internetowej, która jest załadowana na robota). Jednak edytuję, by uzyskać więcej informacji. Dzięki! –