用BufferedImage加载图片
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用BufferedImage加载图片相关的知识,希望对你有一定的参考价值。
参考技术A BufferedImage是Image的一个子类, BufferedImage生成的图片在内存里有一个图像缓冲区,利用这个缓冲区我们可以很方便的操作这个图片,通常用来做图片修改操作如大小变换、图片变灰、设置图片透明或不透明等。Image是一个抽象列,BufferedImage是Image的实现。Image和BufferedImage的主要作用就是将一副图片加载到内存中。
Java将一副图片加载到内存中的方法是:
String imgPath = "C://demo.jpg";
BufferedImage image = ImageIO.read(new FileInputStream(imgPath));
可以用该方法可以获得图片的详细信息,例如:
获得图片的宽度:image.getWidth(null);图片只有加载内存中才能对图片进行进一步的处理。
接下来画出加载过的图片
当我们要在哪里绘图时,就先获得该对象的Graphics对象的引用,然后调用drawImage的方法。对于BuffereImage对象也是一样的。先在BuffereImage对象中绘图,然后将BuffereImage对象绘制到Frame中。这样就实现了双缓冲。
在paint方法中具体实现如下:
public void paint(Graphics g)
super.paint(g);
bi = new BufferedImage(getSize().width, getSize().height, BufferedImage.TYPE_INT_ARGB);
Graphics bg = bi.getGraphics(); //在这里获得了bi的Graphics的引用
bg.drawImage(要显示的图片,.....);//调用bg的drawImage方法。
if (fi)
g = img.getGraphics();
g.drawImage(bi, 50, 50, 40, 40, this);
将一些图片添加到 BufferedImage 然后保存
【中文标题】将一些图片添加到 BufferedImage 然后保存【英文标题】:Adding some pictures to a BuffredImage then Save it 【发布时间】:2015-10-20 04:41:49 【问题描述】:我的总体想法是制作一个 Sprite-Sheet-Maker 我的意思是该程序将:
收集多张图片,例如“1.bmp”、“2.png”和“3.jpg” 创建新的 BuffredImage 变量并在其上绘制 3 张图片(同时在 JPanel 上绘制 BuffredImage) 保存最终图片“Final.png”
我正在考虑在一个循环中进行第一步和第二步,因为我有一个 JList
包含所有图片的路径。
为此,我在 Eclipse 上使用了 Java 窗口构建器,我制作了表单并尝试在 Panel
上测试一个简单的代码。
Panel panel = new Panel(); //Work
panel.setBackground(Color.BLUE); //Work
BufferedImage img = new BufferedImage(5,5,5); //Work
Graphics g = null ; //Work
panel.paintComponents(g); //work
g.setColor(Color.BLACK); //ERROR---------------------ERROR
g.fillRect(0, 0, 50, 50);
问题不仅在于该代码,而且在于所有想法,所以请您的任何想法都可以帮助我,甚至是我项目的一部分的解决方案的一部分,所以请对任何想法发表评论你有。
【问题讨论】:
【参考方案1】: g.setColor(Color.BLACK);//error
自从
Graphics g = null ;//null value, you are not create any obeject
在null
值上,我们无法执行任何操作。
您必须在JPanel
类中覆盖paintComponent
方法,然后您将收到Graphics
对象。
JPanel panel = new JPanel()
@Override
public void paintComponent(Graphics g)
super.paintComponent(g);
g.setColor(Color.BLUE);
g.fillRect(0, 0, 100, 100);
;
frame.add(panel);//added to frame.
See this link
【讨论】:
好的,如何将“Graphics g”与 JPanel 关联起来?? 你想添加到面板吗? 我希望能够在 jpanel 上画画 覆盖paintComponent
方法。看到那个链接【参考方案2】:
-
使用
GridLayout
创建一个JPanel。
创建 3 个 JLabel,每个 JLabel 包含每个图像的图标。然后将每个标签添加到面板中。
要创建任何 Swing 组件的图像,您可以使用 Screen Image 类。
【讨论】:
以上是关于用BufferedImage加载图片的主要内容,如果未能解决你的问题,请参考以下文章
在android开发中 为啥没有BufferedImage类?那我把图片转换成二进制怎么办?