我有一张缓冲图像,其尺寸与我的框架相同:
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=浅蓝色等)并将其绘制到屏幕上。
编辑:
这段代码没有按预期工作(它应该是一个带有黑色绘制图像的框架),但它只是一个空白框架。为什么没有将图像添加到框架中?
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/