方便自己理解
public abstract boolean drawImage(Image img,
int x,
int y,
int width,
int height,
ImageObserver observer)绘制指定图像中已缩放到适合指定矩形内部的图像。
图像绘制在此图形上下文坐标空间的指定矩形内部,并且如果需要,则进行缩放。透明像素不影响该处已存在的像素。
此方法在任何情况下都立刻返回,甚至在整个图像没有为当前输出设备完成缩放、抖动或转换的情况下也是如此。如果当前的输出表示尚未完成,则 drawImage 返回 false。随着更多的图像可用,装入图像的进程将通过调用图像观察者的 imageUpdate 方法来通知它。
图像的缩放版本不一定立刻是可用的,因为已经为此输出设备构造了图像的非缩放版本。每种大小的图像可以被分别缓存,并由各自图像产生序列中的原始数据生成。
参数:
img - 要绘制的指定图像。如果 img 为 null,则此方法不执行任何动作。
x - x 坐标。
y - y 坐标。
width - 矩形的宽度。
height - 矩形的高度。
observer - 当转换了更多图像时要通知的对象。
***********************************扩展**************************************
createImage
public Image createImage(ImageProducer producer)根据指定的图像生成器创建一幅图像。
参数:
producer - 图像生成器
返回:
生成的图像
createImage
public Image createImage(int width,
int height)创建一幅用于双缓冲的、可在屏幕外绘制的图像。
参数:
width - 指定的宽度
height - 指定的高度
返回:
一幅屏幕外可绘制的图像,可用于双缓冲。如果组件是不可显示的,则返回值可能为 null。如果 GraphicsEnvironment.isHeadless() 返回 true,则始终发生这种情况。
public abstract boolean drawImage(Image img,
int x,
int y,
ImageObserver observer)绘制指定图像中当前可用的图像。图像的左上角位于该图形上下文坐标空间的 (x, y)。图像中的透明像素不影响该处已存在的像素。
此方法在任何情况下都立刻返回,甚至在图像尚未完整加载,并且还没有针对当前输出设备完成抖动和转换的情况下也是如此。
如果图像已经完整加载,并且其像素不再发生更改,则 drawImage 返回 true。否则,drawImage 返回 false,并且随着更多的图像可用或者到了绘制动画另一帧的时候,加载图像的进程将通知指定的图像观察者。
参数:
img - 要绘制的指定图像。如果 img 为 null,则此方法不执行任何操作。
x - x 坐标。
y - y 坐标。
observer - 转换了更多图像时要通知的对象。
返回:
如果图像像素仍在更改,则返回 false;否则返回 true。
drawImage
public abstract boolean drawImage(Image img,
int x,
int y,
int width,
int height,
ImageObserver observer)绘制指定图像中已缩放到适合指定矩形内部的图像。
图像绘制在此图形上下文坐标空间的指定矩形内部,如果需要,则进行缩放。透明像素不影响该处已存在的像素。
此方法在任何情况下都立刻返回,甚至在整个图像没有针对当前输出设备完成缩放、抖动或转换的情况下也是如此。如果当前输出表示形式尚未完成,则 drawImage 返回 false。随着更多的图像可用,加载图像的进程将通过调用图像观察者的 imageUpdate 方法来通知它。
缩放的图像不一定立刻可用,因为已经针对此输出设备构造了非缩放的图像。每种大小的图像可以被分别缓存,并由各自图像生产序列中的原始数据生成。
参数:
img - 要绘制的指定图像。如果 img 为 null,则此方法不执行任何操作。
x - x 坐标。
y - y 坐标。
width - 矩形的宽度。
height - 矩形的高度。
observer - 转换了更多图像时要通知的对象。
返回:
如果图像像素仍在改变,则返回 false;否则返回 true。
drawImage
public abstract boolean drawImage(Image img,
int x,
int y,
Color bgcolor,
ImageObserver observer)绘制指定图像中当前可用的图像。图像的左上角位于此图形上下文坐标空间的 (x, y)。以指定的背景色绘制透明像素。
此操作等同于用给定颜色填充指定图像宽度和高度的矩形,然后在其上绘制图像,但此操作效率更高。
此方法在任何情况下都立刻返回,甚至在整个图像尚未加载,并且还没有针对当前输出设备完成抖动和转换的情况下也是如此。
如果图像已经完全加载,并且其像素不再发生改变,则 drawImage 返回 true。否则 drawImage 返回 false,并且随着更多的图像可用或者到了绘制动画另一帧的时候,加载图像的进程将通知指定的图像观察者。
参数:
img - 要绘制的指定图像。如果 img 为 null,则此方法不执行任何操作。
x - x 坐标。
y - y 坐标。
bgcolor - 在图像非透明部分下绘制的背景色。
observer - 当转换了更多图像时要通知的对象。
返回:
如果图像像素仍在改变,则返回 false;否则返回 true。
drawImage
public abstract boolean drawImage(Image img,
int x,
int y,
int width,
int height,
Color bgcolor,
ImageObserver observer)绘制指定图像中已缩放到适合指定矩形内部的图像。
图像绘制在此图形上下文坐标空间的指定矩形内部,如果需要,则进行缩放。以指定的背景色绘制透明像素。此操作等同于用给定颜色填充指定图像宽度和高度的矩形,然后在其上绘制图像,但此操作效率更高。
此方法在任何情况下都立刻返回,甚至在整个图像没有针对当前输出设备完成缩放、抖动或转换的情况下也是如此。如果当前的输出表示形式尚未完成,则 drawImage 返回 false。随着更多的图像可用,加载图像的进程将通知指定的图像观察者。
缩放的图像不一定立刻是可用的,因为已经为此输出设备构造了非缩放的图像。每种大小的图像可以被分别缓存,并由各自图像生产序列中的原始数据生成。
参数:
img - 要绘制的指定图像。如果 img 为 null,则此方法不执行任何操作。
x - x 坐标。
y - y 坐标。
width - 矩形的宽度。
height - 矩形的高度。
bgcolor - 在图像非透明部分下绘制的背景色。
observer - 当转换了更多图像时要通知的对象。
返回:
如果图像像素仍在改变,则返回 false;否则返回 true。
drawImage
public abstract boolean drawImage(Image img,
int dx1,
int dy1,
int dx2,
int dy2,
int sx1,
int sy1,
int sx2,
int sy2,
ImageObserver observer)绘制当前可用的指定图像的指定区域,动态地缩放图像使其符合目标绘制表面的指定区域。透明像素不影响该处已存在的像素。
此方法在任何情况下都立刻返回,甚至在要绘制的图像区域没有针对当前输出设备完成缩放、抖动或转换的情况下也是如此。如果当前的输出表示形式尚未完成,则 drawImage 返回 false。随着更多的图像可用,加载图像的进程将通知指定的图像观察者。
此方法总是用非缩放的图像来呈现缩放的矩形,并且动态地执行所需的缩放。此操作不使用缓存的缩放图像。执行图像从源到目标的缩放:源矩形的第一个坐标被映射到目标矩形的第一个坐标,第二个源坐标被映射到第二个目标坐标。按需要缩放和翻转子图像以保持这些映射关系。
参数:
img - 要绘制的指定图像。如果 img 为 null,则此方法不执行任何操作。
dx1 - 目标矩形第一个角的 x 坐标。
dy1 - 目标矩形第一个角的 y 坐标。
dx2 - 目标矩形第二个角的 x 坐标。
dy2 - 目标矩形第二个角的 y 坐标。
sx1 - 源矩形第一个角的 x 坐标。
sy1 - 源矩形第一个角的 y 坐标。
sx2 - 源矩形第二个角的 x 坐标。
sy2 - 源矩形第二个角的 y 坐标。
observer - 当缩放并转换了更多图像时要通知的对象。
返回:
如果图像像素仍在改变,则返回 false;否则返回 true。
drawImage
public abstract boolean drawImage(Image img,
int dx1,
int dy1,
int dx2,
int dy2,
int sx1,
int sy1,
int sx2,
int sy2,
Color bgcolor,
ImageObserver observer)绘制当前可用的指定图像的指定区域,动态地缩放图像使其符合目标绘制表面的指定区域。
以指定的背景色绘制透明像素。此操作等同于用给定颜色填充指定图像宽度和高度的矩形,然后在其上绘制图像,但此操作效率更高。
此方法在任何情况下都立刻返回,甚至在要绘制的图像区域没有针对当前输出设备完成缩放、抖动或转换的情况下也是如此。如果当前的输出表示形式尚未完成,则 drawImage 返回 false。随着更多的图像可用,加载图像的进程将通知指定的图像观察者。
此方法总是用非缩放的图像来呈现缩放的矩形,并且动态地执行所需的缩放。此操作不使用缓存的缩放图像。执行图像从源到目标的缩放:源矩形的第一个坐标被映射到目标矩形的第一个坐标,第二个源坐标被映射到第二个目标坐标。按需要缩放和翻转子图像以保持这些映射关系。
参数:
img - 要绘制的指定图像。如果 img 为 null,则此方法不执行任何操作。
dx1 - 目标矩形第一个角的 x 坐标。
dy1 - 目标矩形第一个角的 y 坐标。
dx2 - 目标矩形第二个角的 x 坐标。
dy2 - 目标矩形第二个角的 y 坐标。
sx1 - 源矩形第一个角的 x 坐标。
sy1 - 源矩形第一个角的 y 坐标。
sx2 - 源矩形第二个角的 x 坐标。
sy2 - 源矩形第二个角的 y 坐标。
bgcolor - 在图像非透明部分下绘制的背景色。
observer - 当缩放并转换了更多图像时要通知的对象。
返回:
如果图像像素仍在改变,则返回 false;否则返回 true。
copyArea
public abstract void copyArea(int x,
int y,
int width,
int height,
int dx,
int dy)将组件的区域复制到由 dx 和 dy 指定的距离处。此方法从 x 和 y 指定的点向下和向右复制。要将组件的区域向左或向上复制,请指定负的 dx 或 dy 值。如果源矩形的一部分位于组件边界的外部,或者被另一个窗口或组件遮掩,那么 copyArea 将无法复制相关的像素。通过调用组件的 paint 方法可刷新被忽略的区域。
参数:
x - 源矩形的 x 坐标。
y - 源矩形的 y 坐标。
width - 源矩形的宽度。
height - 源矩形的高度。
dx - 复制像素的水平距离。
dy - 复制像素的垂直距离。
方便自己理解public abstract boolean drawImage(Image img,int x,int y,int width,int height,ImageObserver observer)绘制指定图像中已缩放到适合指定矩形内部的图像。图像绘制在此图形上下文坐标空间的指定矩形内部,并且如果需要,则进行缩放。透明像素不影响该处已存在的像素。此方法在任何情况下都...
mport
java
.awt.*;
import
java
.awt.event.ActionEvent;
import
java
.awt.event.ActionListener;
import
java
x.swing.*;
public class test {
ImageIcon imageIcon =new ImageIcon("透明旋转枫.gif");//images这个文件
ImageIcon imagebutton=new ImageIcon("button.png");
JLabel j2=new JLabel();
public test(){
final JFrame f= new JFrame();
f.setBounds(0,00,400,300);
f.setDefaultCloseOperation(3);
f.setUndecorated(true);
com.sun.awt.AWTUtilities.setWindowOpaque(f,false);//设置窗体透明
JPanel p=new JPanel(){
public void paintComponent(Graphics g){//重写paintComponent
super.paintComponent(g);//继承的绘制组件
方法
Graphics2D
gg=(
Graphics2D
)g;
if(imageIcon !=null){//绘制背景
gg.
drawImage
(imageIcon.getImage(),0,0,f.getWidth(),f.getHeight(),f);
p.setLayout(null);//空布局 任意摆放 与下面的b1.setBounds(280,80,60,25);呼应
JButton b1=new JButton("exit",imagebutton);
b1.addActionListener(new ActionListener(){
public void actionPerformed (ActionEvent e){
System.exit(0);
* @param fromFilePath 原始图片完整路径
* @param saveToFilePath 缩略图片保存路径
* @param width 剪切后图片的宽
* @param height 剪切后图片的高
* @throws Exception
private static void cutIma
主要代码:
BufferedImage image = new BufferedImage(400, 120, BufferedImage.TYPE_4BYTE_ABGR);
Graphics2D
g2d = image.createGraphics();
g2d.setColor(Color.BLUE);
//g2d.fillRoundRect(0, 0, 400, 120, 40, 40);
BasicStroke stroke = new BasicStroke(4);
g2d.setStroke(stroke);
g2d.drawRoundRect(0, 0, 400, 120, 40, 40);
g2d.dispose();
g2d = (
Graphics2D
) g;
Image imgScale = image.getScaledInstance(100, 30, Image.SCALE_AREA_AVERAGING);
g2d.
drawImage
(imgScale, 0, 0, null);
graphics.
drawImage
(originalBufferedImage, rectangle.x,
rectangle.y,
rectangle.width, rectangle.height, null);
优化的写法
graphics.
drawImage
(
java
图片背景复选框Demo,主要代码
Image srcImg = ImageIO.read(new File("images/imagecb/cb_unselect.png"));
BufferedImage bufImg = new BufferedImage(20, 20, BufferedImage.TYPE_INT_ARGB_PRE);
Graphics2D
g2d = bufImg.createGraphics();
g2d.
drawImage
(srcImg, 0, 0, 20, 20, null);
cb.setIcon(new ImageIcon(bufImg));
g2d.dispose();
srcImg = ImageIO.read(new File("images/imagecb/cb_selected.png"));
bufImg = new BufferedImage(20, 20, BufferedImage.TYPE_INT_ARGB_PRE);
g2d = bufImg.createGraphics();
g2d.
drawImage
(srcImg, 0, 0, 20, 20, null);
cb.setSelectedIcon(new ImageIcon(bufImg));
g2d.dispose();
srcImg = ImageIO.read(new File("images/imagecb/cb_unselect_hover.png"));
bufImg = new BufferedImage(20, 20, BufferedImage.TYPE_INT_ARGB_PRE);
g2d = bufImg.createGraphics();
g2d.
drawImage
(srcImg, 0, 0, 20, 20, null);
cb.setRolloverIcon(new ImageIcon(bufImg));
g2d.dispose();
srcImg = ImageIO.read(new File("images/imagecb/cb_selected_hover.png"));
bufImg = new BufferedImage(20, 20, BufferedImage.TYPE_INT_ARGB_PRE);
g2d = bufImg.createGraphics();
g2d.
drawImage
(srcImg, 0, 0, 20, 20, null);
cb.setRolloverSelectedIcon(new ImageIcon(bufImg));
g2d.dispose();
主要代码:
BufferedImage image = new BufferedImage(400, 120, BufferedImage.TYPE_4BYTE_ABGR);
Graphics2D
g2d = image.createGraphics();
g2d.setColor(Color.BLUE);
g2d.fillRoundRect(0, 0, 400, 120, 40, 40);
g2d.dispose();
g2d = (
Graphics2D
) g;
Image imgScale = image.getScaledInstance(100, 30, Image.SCALE_SMOOTH);
g2d.
drawImage
(imgScale, 0, 0, null);
2. 创建一个BufferedImage对象,使用原始图片的宽度和高度作为
参数
。
3. 获取
Graphics2D
对象,使用BufferedImage对象的createGraphics()
方法
。
4. 设置
Graphics2D
对象的渲染质量和抗锯齿。
5. 使用
Graphics2D
对象的
drawImage
()
方法
将原始图片绘制到BufferedImage对象
中
。
6. 使用ImageIO.write()
方法
将BufferedImage对象保存为缩略图。
7. 关闭
Graphics2D
对象和输入输出流。
示例代码如下:
import
java
.awt.
Graphics2D
;
import
java
.awt.RenderingHints;
import
java
.awt.image.BufferedImage;
import
java
.io.File;
import
java
x.imageio.ImageIO;
public class ImageUtils {
public static void createThumbnail(String sourceImagePath, String targetImagePath, int targetWidth, int targetHeight) throws Exception {
BufferedImage sourceImage = ImageIO.read(new File(sourceImagePath));
BufferedImage targetImage = new BufferedImage(targetWidth, targetHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D
graphics2D
= targetImage.createGraphics();
graphics2D
.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
graphics2D
.
drawImage
(sourceImage, , , targetWidth, targetHeight, null);
ImageIO.write(targetImage, "JPEG", new File(targetImagePath));
graphics2D
.dispose();
调用示例:
ImageUtils.createThumbnail("source.jpg", "target.jpg", 100, 100);