Java图片处理Graphics2D使用教程(五)

436 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第23天,点击查看活动详情

写在前面

最近几天忽然发现关于Graphics2D的详细使用比较少,正好这两天在搞Java操作图片的相关需求。

顺便整理一下Graphics2D相关的API方法,希望能帮到一些朋友。

欢迎大家关注这个专栏。

为什么要写一个Graphics2D使用教程?

  1. 规范整理

  2. 学习留存

  3. 知识点积累

具体使用

今天我们来讲述的是关于Graphics中的drawImage最后一类方法,当然Graphics2D也同样给出了关于drawImage的方法,今天就一并来看一下。

drawImage(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, Color bgcolor, ImageObserver observer)

此方法提供了更多的参数,意味着可以更灵活的处理图像。

因为参数的增多,需要重新说一下,一共要传入4组坐标。

前两组坐标是指定要放置的坐标点位。

后两组是将要使用的图像坐标点位。

代码示例如下:

InputStream inputStream = new FileInputStream("D:/cat.jpg");
BufferedImage image = new BufferedImage(500, 500, BufferedImage.TYPE_INT_RGB);
BufferedImage bufferedImage = ImageIO.read(inputStream);
Graphics2D graphics2D = image.createGraphics();
graphics2D.drawImage(bufferedImage, 0, 0, 500, 500,0, 0,300, 300, Color.RED, null);
ImageIO.write(image, "png", new FileOutputStream("D:/3.png"));

生成图片效果如下:

这个图片就是将cat.jpg图片的从左上角开始的300*300的像素绘制到底板上。

image.png

drawImage(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, ImageObserver observer)

此接口和上面那个接口是一样的,唯一不同的就是Color背景颜色参数的缺失。

不是镂空的图片,这个参数的意义等于0。

drawImage(BufferedImage img, BufferedImageOp op, int x, int y)

此方法,是Graphics2D独有的方法了,是在Graphics类的基础上加入了可自定义的操作。

这里的BufferedImageOp对象其实可以用多个选择,ConvolveOp、AffineTransformOp、ColorConvertOp、LookupOp等几个实现类。

我大概了解了一下,这几个类主要带来的功能如下:

ConvolveOp:模糊,或者说是马赛克功能,但是需要自己去定义像素值。

AffineTransformOp:处理大小功能,是几个里面最好理解的一个功能类了。

ColorConvertOp:颜色蒙版功能

LookupOp:提供查询覆盖功能,也有人们使用这个类来做黑白处理。

代码示例:

InputStream inputStream = new FileInputStream("D:/cat.jpg");
BufferedImage image = new BufferedImage(500, 500, BufferedImage.TYPE_INT_RGB);
BufferedImage bufferedImage = ImageIO.read(inputStream);
Graphics2D graphics2D = image.createGraphics();
AffineTransform at  =   new  AffineTransform();
at.scale(0.5, 0.5);
BufferedImageOp bi = new AffineTransformOp(at,  null);
graphics2D.drawImage(bufferedImage, bi, 200, 200);
ImageIO.write(image, "png", new FileOutputStream("D:/3.png"));

图像效果:

image.png

如果传入BufferedImageOp对象为空的话,则会得到下面的图像。

graphics2D.drawImage(bufferedImage, bi, 200, 200);

image.png

小结

今天我们不但将Graphics中绘制图像的方法讲述完了,而且还讲述了Graphics2D中独有的一个drawImage方法,希望能帮到有需要的人们。