經過幾天的互聯網衝浪後,我發現一個問題似乎解決了我的目標。 (我試圖繪製/編輯圖像中的單個像素並進行渲染。)在上述問題中,請求者請求Black BufferedImage的代碼。頂部答案提供了代碼,並且看起來工作得很好,直到您嘗試將其更改爲黑色以外的其他東西。代碼如下:如何編輯BufferedImage中的像素?
package myProjectPackage;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferStrategy;
import java.awt.image.BufferedImage;
import java.awt.image.DataBufferInt;
import javax.swing.*;
public class Copypasta {
public static JFrame frame;
BufferedImage img;
public static int WIDTH = 500;
public static int HEIGHT = 500;
public Copypasta() {
}
public static void main(String[] a){
Copypasta t=new Copypasta();
frame = new JFrame("WINDOW");
frame.setVisible(true);
t.start();
frame.add(new JLabel(new ImageIcon(t.getImage())));
frame.pack();
// Better to DISPOSE than EXIT
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
public Image getImage() {
return img;
}
public void start(){
img = new BufferedImage(WIDTH, HEIGHT,BufferedImage.TYPE_INT_RGB);
int[] pixels = ((DataBufferInt)img.getRaster().getDataBuffer()).getData();
boolean running=true;
while(running){
BufferStrategy bs=frame.getBufferStrategy();
if(bs==null){
frame.createBufferStrategy(4);
return;
}
for (int i = 0; i < WIDTH * HEIGHT; i++)
pixels[i] = 0; //This is what i've been trying to change.
Graphics g= bs.getDrawGraphics();
g.drawImage(img, 0, 0, WIDTH, HEIGHT, null);
g.dispose();
bs.show();
}
}
}
我爲縮進錯誤道歉。我保證它在編輯器中看起來很正確。
當設置爲BufferedImage類型ARGB時,黑色背景消失,導致我認爲開始函數根本沒有繪製圖像,或者繪製的圖像沒有繪製在屏幕上。無論哪種方式,有一些我不明白的東西。如果你有時間,我會很感激一些幫助確定什麼是錯誤的,如果不是解釋原因。謝謝大家, - Navi。
鏈接到原始的問題:drawing your own buffered image on frame
我「認爲」問題是因爲JFrame上已經有「東西」,它阻止了任何被繪製到「BufferStrategy」的東西被顯示出來。你能解釋爲什麼你需要使用'BufferStrategy'來做到這一點......此外,像素數組並不是像素數據的「實時」副本,這意味着修改不會改變底層圖像...一些有關您實際嘗試實現的更多信息可能允許我們爲您提供其他解決方案 – MadProgrammer
非常感謝。我根本不需要使用Bufferstrategy,這只是示例中的內容。我相當新的Java,我用unity3d javascript,但決定我想把它提升一個級別。我目前的目標是編輯窗口中的像素。如果您有任何提示/技巧,任何方法都會很棒。 – Navigatron