Tôi mới dùng đồ họa Java (đồ họa máy tính nói chung) và Stack Overflow, vì vậy hãy giúp tôi và giúp tôi giải đáp tốt hơn.BufferedImage không hiển thị (tất cả màu đen) nhưng Hình ảnh có thể được hiển thị
Hiện tại, tôi đang cố hiển thị BufferedImage cùng với hình ảnh gốc trong GUI Java. Đây là mã của tôi:
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
và "đặt" hàm được như sau:
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();
}
Tuy nhiên, giao diện kết quả được như sau
Vì vậy, các tác phẩm ảnh , nhưng BufferedImage thì không. Tôi giả sử nó hoạt động vì BufferedImage là một phân lớp của hình ảnh ... Bất kỳ ý tưởng? Xin vui lòng cho tôi biết nếu mã bổ sung là cần thiết ~ Cảm ơn trước :)
EDIT 1:
tôi đã làm một số thử nghiệm, và thay vì sử dụng hình ảnh ban đầu, tôi đã tạo ra một BufferedImage hoàn toàn mới, và sử dụng Graphics2D để vẽ một đường rồi thử và hiển thị nó. đây là kết quả:
Vì vậy, nó hoạt động. Do đó phải có điều gì đó sai với hình ảnh gốc (hoặc chuyển đổi đã xảy ra)
EDIT 2: Tôi đã làm một điều tương tự với bufferedImage và vẽ một đường. Kết quả là giống như EDIT 1, và do đó tôi nghĩ rằng có một số vấn đề với chức năng drawImage.
EDIT 3: Tôi đã khắc phục sự cố bằng cách đặt một vòng lặp xung quanh drawImage để cho phép hoàn thành bản vẽ hình ảnh (vì nó trả về false nếu chưa hoàn thành vẽ hình ảnh) và hoạt động! : D
boolean x = false;
while (!x) {
x = hi.drawImage(oriImage, 0,0, null); //draw the original image into the BufferedImage
}
Bạn có thể vui lòng đăng mã cho cách ban đầu bạn tạo đối tượng 'bufferedImage'. – cgull
'// tải hình ảnh gốc' Đồng bộ (chờ cho đến khi tải hình ảnh) hoặc không đồng bộ (mã tiếp tục khi tải hình ảnh)? Để được trợ giúp tốt hơn sớm hơn, hãy đăng một [SSCCE] (http://sscce.org/). –
Tôi sẽ nếu tôi có thể đăng SSCCE, vấn đề là toàn bộ dự án là khá lớn và rất nhiều mã không liên quan đến vấn đề này. (Hình ảnh chúng tôi đang nhận được từ một webcam được tải trên rô bốt) Tuy nhiên, tôi sẽ chỉnh sửa để biết thêm thông tin. Cảm ơn! –