借鉴框架自己的缓冲图像(drawing your own buffered image on fra

2019-06-25 17:20发布

我有我的帧的大小缓冲图像:

public BufferedImage img;
public static int WIDTH = 800;
public static int HEIGHT = 600;
img=new BufferedImage(WIDTH, HEIGHT,BufferedImage.TYPE_INT_RGB);

我怎样才能画,所以我能看到的只是一个黑色的图像填充帧? 不使用Canvas

我希望只使用从图形drawImage方法不使用油漆或功能的paintComponent

如果可能的话,如何可以分配一个一维数组[宽×高]对图像?

简单地说:我想创建一个图像,从数组值转换为像素(0 =黑色,999999999 = lightblue等),并将其绘制到屏幕。

编辑:

这是因为预期不工作密码(应该是上有一个黑色的绘制图像的帧),但仅仅是一个空白frame.Why图像不TOT帧添加?

  import javax.swing.*;

  import java.awt.Canvas;
  import java.awt.Graphics;
  import java.awt.image.BufferStrategy;
  import java.awt.image.BufferedImage;
  import java.awt.image.DataBufferInt;

  public class test extends Canvas{

public static JFrame frame;
public static int WIDTH = 800;
public static int HEIGHT = 600;

public test(){

}

public static void main(String[] a){

        test t=new test();
        frame = new JFrame("WINDOW");
        frame.add(t);
        frame.pack();
        frame.setVisible(true);
        frame.setSize(WIDTH, HEIGHT);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        t.start();

}

public void start(){

    BufferedImage img = new BufferedImage(WIDTH, HEIGHT,BufferedImage.TYPE_INT_RGB);
    int[] pixels = ((DataBufferInt)img.getRaster().getDataBuffer()).getData();
    boolean running=true;
    while(running){
        BufferStrategy bs=this.getBufferStrategy();
        if(bs==null){
            createBufferStrategy(4);
            return;
        }
        for (int i = 0; i < WIDTH * HEIGHT; i++)
            pixels[i] = 0;

        Graphics g= bs.getDrawGraphics();
        g.drawImage(img, 0, 0, WIDTH, HEIGHT, null);
        g.dispose();
        bs.show();

    }
}}

Answer 1:

据我了解,你正在努力实现(这是“不是很多”)是什么,这可能会给你一些提示。 框架和图像的建设似乎仍然凌乱的我,但看看这个了。

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 TestImageDraw {

    public static JFrame frame;
    BufferedImage img;
    public static int WIDTH = 800;
    public static int HEIGHT = 600;

    public TestImageDraw() {
    }

    public static void main(String[] a){

        TestImageDraw t=new TestImageDraw();

        frame = new JFrame("WINDOW");
        frame.setVisible(true);

        t.start();
        frame.add(new JLabel(new ImageIcon(t.getImage())));

        frame.pack();
//      frame.setSize(WIDTH, HEIGHT);
        // 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;

            Graphics g= bs.getDrawGraphics();
            g.drawImage(img, 0, 0, WIDTH, HEIGHT, null);
            g.dispose();
            bs.show();

        }
    }
}

一般提示

  • 请使用代码块一致性和逻辑缩进。
  • 请了解常见的Java命名约定的类,方法和属性名称及始终如一地使用它(特别情况下使用的名称)。
  • 给测试类一个有意义的名称,如TestImageDraw
  • 创建和更新的EDT摇摆的GUI。
  • 不要没有很好的理由混合的Swing和AWT组件。


文章来源: drawing your own buffered image on frame