相关文章推荐
飞奔的丝瓜  ·  Xlib中的xcb_shm_get_imag ...·  1 年前    · 
买醉的野马  ·  docker - Error saving ...·  1 年前    · 

方便自己理解

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);