java - 在框架上绘制自己的缓冲图像

标签 java arrays image draw bufferedimage

我有一张缓冲图像,其尺寸与我的框架相同:

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

我怎样才能画出它,以便我只能看到一个黑色的图像填充框架?不使用 Canvas

我只想使用图形中的 drawImage 函数而不使用 paint 或 paintComponent 函数

如果可能,我如何为该图像分配一维数组 [WIDTH*HEIGHT]?

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

编辑:

这段代码没有按预期工作(它应该是一个带有黑色绘制图像的框架),但它只是一个空白框架。为什么没有将图像添加到框架中?

enter image description here

  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();
        
    }
}}

最佳答案

据我了解您要实现的目标(“不是很多”),这可能会给您一些提示。框架和图像的构造对我来说仍然不整洁,但请看一下。

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 naming conventions (特别是用于名称的大小写)用于类、方法和属性名称并始终如一地使用它。
  • 为测试类起一个有意义的名称,例如TestImageDraw.
  • 在 EDT 上创建和更新 Swing GUI。
  • 不要在没有充分理由的情况下混用 Swing 和 AWT 组件。

关于java - 在框架上绘制自己的缓冲图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11163925/

相关文章:

arrays - 如何将 Coffeescript 关联数组(即哈希)中的值提取到简单数组中?

javascript - jQuery 图像 slider - 奇怪的行为

css - 在 iPad 上的网站中加载图像的最大高度是多少

java - hibernate PropertyNotFoundException

java - 该代码正在为 else 部分生成错误。请帮助我更正我的代码

java - 如何手工计算一个字符串的哈希码?

java - 使用maven编译时将xml文件从src/复制到class/

c - K&R C 练习 3-3 编辑数组中的 char 元素不起作用?

javascript - while 循环不适用于 $.each

html - 在 HTML 中,如何在将鼠标悬停在文本上时显示图像?