java的用bufferimage方法实现图像加载

发布于:2025-02-10 ⋅ 阅读:(26) ⋅ 点赞:(0)

也可以用javax.imageio.imager()类的read取得图像,返回的是bufferiamge对象、

buffer image imageio.read()

package jj;

import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class imagebuff {
	public BufferedImage  imagebu(String fiel1,String fiel2) {
		try {
			
			//读入图像
		File file1=new File(fiel1);
		Image src=javax.imageio.ImageIO.read(file1);//构造image对象
		int width=src.getWidth(null);//得到图宽
		int height=src.getHeight(null);//得到图高
		//图片放缩
		  BufferedImage tag = new BufferedImage(width / 2, height / 2, BufferedImage.TYPE_INT_RGB);
          Graphics2D g2d = tag.createGraphics(); // 获取 Graphics2D 对象

          // 绘制缩小后的图
          g2d.drawImage(src, 30, 20, width / 2, height / 2, null);
          
          g2d.dispose(); // 释放图形上下文资源
          
//		BufferedImage tag=new  BufferedImage(widt/2, heig/2, BufferedImage.TYPE_INT_RGB);
//		//绘制缩小后的图
//		tag.createGraphics().drawImage(src,0,2,widt/2,heig/2,null);
		FileOutputStream fileout=new FileOutputStream(fiel2);
		//输出文件到文件流jpeg编码
		ImageIO.write(tag,"jpg",fileout);
		System.out.println("重新调整后的图像为jpeg");
		
		/*
		 。这个方法通常用于从一个组件(如Canvas、Panel或Window)获取图形上下文(Graphics对象),然后可以在该组件上绘制图形。
		 
		 *在Java中,getGraphics() 方法是 Component 类的一个方法,它返回与此组件关联的图形上下文,或者如果组件没有显示在屏幕上,则返回 null。在您提供的代码段中,getGraphics() 方法是在 BufferedImage 对象 tag 上调用的,如下所示:
Graphics g = tag.getGraphics();
这里,tag 是一个 BufferedImage 对象,而 BufferedImage 类是 Component 类的一个子类,因此它继承了 getGraphics() 方法。通过调用 getGraphics(),您获得了一个 Graphics 对象,该对象允许您在 BufferedImage 对象上绘制图形。
需要注意的是,虽然 getGraphics() 方法可以用于直接在 BufferedImage 上绘制,但在实际应用中,通常推荐使用 Graphics2D 类,它是 Graphics 类的一个扩展,提供了更高级的绘图功能。以下是使用 Graphics2D 的例子:
Graphics2D g2d = (Graphics2D) tag.getGraphics();
// 进行绘制操作...
g2d.dispose(); // 绘制完成后释放资源
在使用 getGraphics() 方法时,您应该始终在完成绘制后调用 dispose() 方法来释放图形上下文占用的资源。这是因为 Graphics 对象可能会持有系统资源,如字体或颜色,而这些资源在使用完毕后应该被释放。*/
		
		
			return tag;
			
		} catch (Exception e) {
			e.printStackTrace();
			// TODO: handle exception
		}
		return null;
	
		
		// TODO Auto-generated constructor stub
	
	
	}
	
	public static void main(String[] args) {
		
      BufferedImage resizedImage = new imagebuff().imagebu("D:\\programing\\jj\\src\\21.png","D:\\programing\\jj\\src\\20.jpg");
		JFrame frame = new JFrame("显示图像");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JLabel label = new JLabel(new ImageIcon(resizedImage));
        frame.getContentPane().add(label);
        frame.pack();
        frame.setVisible(true);
	}

}

这里我们需要注意,图像并不能单独显示,图像的显示要用paint方法,这里我们创建了frame对象,通过添加组件的方式来实现将图像显示,也可以通过继承的重写 paint 方法

Graphics2D g2d = tag.createGraphics(); /这一步是获取

在Java中,Graphics2D 是 Graphics 类的一个扩展,它提供了更高级的绘图操作和更精细的控制。当您创建一个 Graphics2D 对象时,您是为了能够在这个图像上执行绘图操作。以下是使用 Graphics2D g2d = tag.createGraphics(); 这一步骤的目的:

  1. 绘图上下文Graphics2D 对象 g2d 代表了 BufferedImage 对象 tag 的绘图上下文。它包含了绘图状态信息,如颜色、字体、笔划和变换等。

  2. 绘制操作:一旦有了 Graphics2D 对象,您就可以调用它的各种方法来绘制形状、文本、图像等。例如,您可以调用 g2d.drawImage() 来绘制图像,g2d.fill() 来填充形状,或者 g2d.drawString() 来绘制文本。

  3. 图像处理Graphics2D 提供了比 Graphics 更多的图像处理功能,例如抗锯齿渲染、透明度设置(通过 Composite)、变换(通过 AffineTransform)等。对

对图像进行操纵

在您提供的代码片段中,两行代码执行了以下操作:
创建一个新的 BufferedImage 对象:
BufferedImage tag = new BufferedImage(width / 2, height / 2, BufferedImage.TYPE_INT_RGB);
这行代码创建了一个新的图像缓冲区 tag,其具有以下特性:
宽度为原始图像宽度的一半(width / 2)。
高度为原始图像高度的一半(height / 2)。
图像类型为 BufferedImage.TYPE_INT_RGB,这意味着图像使用 8 位 RGB 颜色分量进行存储,每个像素由一个整数表示。
获取 Graphics2D 对象以在新的 BufferedImage 对象上进行绘图:
Graphics2D g2d = tag.createGraphics();
这行代码执行以下操作:
调用 BufferedImage 对象 tag 的 createGraphics() 方法。
返回一个 Graphics2D 对象 g2d,它是 tag 图像的图形上下文。
Graphics2D 对象 g2d 可以用来在 tag 图像上执行绘图操作,如绘制形状、文本、图像等。
通过这两步操作,您创建了一个新的图像缓冲区,并且准备好了一个 Graphics2D 对象,可以在该缓冲区上进行绘图。之后,您可以使用 g2d 对象的方法来绘制内容到 tag 图像上。例如,您可以使用 g2d.drawImage() 方法来绘制另一个图像到 tag 上,或者使用其他绘图方法来添加自定义图形和文本。