JAVA的drawImage方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA的drawImage方法相关的知识,希望对你有一定的参考价值。

1.我要画一个图,开始坐标为标题栏下面的最左上角,请问坐标x、y怎么写?(不是“0,0”,这时,指的是整个窗体的最左上角,即包括标题栏);
2.用drawImage时,载入图片的容器可以是“this”,还有其他可以用这个方法的控件吗?怎么好像容器、标签都不可以?标签不是可以添加图片的吗?
谢谢!
1.那个“白白的部分”最左上角的坐标是什么啊?我用drawImage方法时,x和y坐标是什么才能使得从白白的部分的最左上角开始绘图?

(1)
//首先add一个Panel
Frame frm=new Frame();
Panel temp=new Panel();
frm.setLayout(new BorderLayout()); //可以省略,Frame默认就是BorderLayout
frm.add("Center",temp);
frm.setVisible(true);
//获得temp在frm内的位置坐标
Point p=temp.getPosition();
frm.remove(temp);
frm.getGraphics().drawImage(图,p.x,p.y,frm);

(2)
只要实现了ImageObserver接口的类都可以作为drawImage(Image i,int x,int y,ImageObserver observer)的最后一个实参
详见API文档
参考技术A 1、窗体的左上角。不包括标题栏,和工具栏。就是你看到的白白的部分。
2、可以这样用的,几乎包括所有的可绘图容器。不过,this是指代当前对象,如果你的当前对象不是一个可以绘图的组件,那也不可以。标签是可以添加图片的,用setImage方法。

JAVA drawImage

drawImage
public abstract boolean drawImage(Image img,
int x,
int y,
ImageObserver observer)
第四个参数ImageObserver observer意思是当转换了更多图像时要通知的对象。 具体什么意思不太懂 谁能详细的解释下这个参数,还有这个参数取值都有什么? 谢谢

参考技术A java.awt.image
接口 ImageObserver
所有已知实现类:
AbstractButton, AbstractColorChooserPanel, Applet, BasicArrowButton, BasicComboBoxRenderer, BasicComboBoxRenderer.UIResource, BasicComboPopup, BasicInternalFrameTitlePane, BasicInternalFrameTitlePane.SystemMenuBar, BasicSplitPaneDivider, BasicToolBarUI.DragWindow, Box, Box.Filler, Button, Canvas, CellRendererPane, Checkbox, Choice, Component, Container, DefaultListCellRenderer, DefaultListCellRenderer.UIResource, DefaultTableCellRenderer, DefaultTableCellRenderer.UIResource, DefaultTreeCellEditor.DefaultTextField, DefaultTreeCellEditor.EditorContainer, DefaultTreeCellRenderer, Dialog, FileDialog, Frame, JApplet, JButton, JCheckBox, JCheckBoxMenuItem, JColorChooser, JComboBox, JComponent, JDesktopPane, JDialog, JEditorPane, JFileChooser, JFormattedTextField, JFrame, JInternalFrame, JInternalFrame.JDesktopIcon, JLabel, JLayeredPane, JList, JMenu, JMenuBar, JMenuItem, JOptionPane, JPanel, JPasswordField, JPopupMenu, JPopupMenu.Separator, JProgressBar, JRadioButton, JRadioButtonMenuItem, JRootPane, JScrollBar, JScrollPane, JScrollPane.ScrollBar, JSeparator, JSlider, JSpinner, JSpinner.DateEditor, JSpinner.DefaultEditor, JSpinner.ListEditor, JSpinner.NumberEditor, JSplitPane, JTabbedPane, JTable, JTableHeader, JTextArea, JTextComponent, JTextField, JTextPane, JToggleButton, JToolBar, JToolBar.Separator, JToolTip, JTree, JViewport, JWindow, Label, List, MetalComboBoxButton, MetalComboBoxUI.MetalComboPopup, MetalFileChooserUI.FileRenderer, MetalFileChooserUI.FilterComboBoxRenderer, MetalInternalFrameTitlePane, MetalScrollButton, Panel, Scrollbar, ScrollPane, TextArea, TextComponent, TextField, Window

--------------------------------------------------------------------------------

public interface ImageObserver用于在构造 Image 时,接收有关 Image 信息通知的异步更新接口。

--------------------------------------------------------------------------------

字段摘要
static int ABORT
imageUpdate 的 infoflags 参数中的此标志指示被异步跟踪的图像在生成完成前即已中止。
static int ALLBITS
imageUpdate 的 infoflags 参数中的此标志指示现在已完成了一幅以前绘制的静态图像,并且可以其最终形式再次绘制它。
static int ERROR
imageUpdate 的 infoflags 参数中的此标志指示被异步跟踪的图像遇到了错误。
static int FRAMEBITS
imageUpdate 的 infoflags 参数中的此标志指示多帧图像(以前绘制的)的另一个完整帧现在可以再次绘制。
static int HEIGHT
imageUpdate 的 infoflags 参数中的此标志指示基本图像的高度现在可用,并且可从 height 参数中获取此高度到 imageUpdate 回调方法。
static int PROPERTIES
imageUpdate 的 infoflags 参数中的此标志指示该图像的属性现在可用。
static int SOMEBITS
imageUpdate 的 infoflags 参数中的此标志指示已提供了绘制图像缩放变体所需的更多像素。
static int WIDTH
imageUpdate 的 infoflags 参数中的此标志指示基本图像的宽度现在可用,并且可从 width 参数中获取此宽度到 imageUpdate 回调方法。
方法摘要
boolean imageUpdate(Image img, int infoflags, int x, int y, int width, int height)
当以前使用异步接口所请求的图像的信息变得可用时就调用此方法。

字段详细信息

WIDTH
static final int WIDTHimageUpdate 的 infoflags 参数中的此标志指示基本图像的宽度现在可用,并且可从 width 参数中获取此宽度到 imageUpdate 回调方法。

另请参见:
Image.getWidth(java.awt.image.ImageObserver), imageUpdate(java.awt.Image, int, int, int, int, int), 常量字段值

--------------------------------------------------------------------------------

HEIGHT
static final int HEIGHTimageUpdate 的 infoflags 参数中的此标志指示基本图像的高度现在可用,并且可从 height 参数中获取此高度到 imageUpdate 回调方法。

另请参见:
Image.getHeight(java.awt.image.ImageObserver), imageUpdate(java.awt.Image, int, int, int, int, int), 常量字段值

--------------------------------------------------------------------------------

PROPERTIES
static final int PROPERTIESimageUpdate 的 infoflags 参数中的此标志指示该图像的属性现在可用。

另请参见:
Image.getProperty(java.lang.String, java.awt.image.ImageObserver), imageUpdate(java.awt.Image, int, int, int, int, int), 常量字段值

--------------------------------------------------------------------------------

SOMEBITS
static final int SOMEBITSimageUpdate 的 infoflags 参数中的此标志指示已提供了绘制图像缩放变体所需的更多像素。可从 x、y、width 和 height 参数中获取新像素的边界框到 imageUpdate 回调方法。

另请参见:
Graphics.drawImage(java.awt.Image, int, int, java.awt.image.ImageObserver), imageUpdate(java.awt.Image, int, int, int, int, int), 常量字段值

--------------------------------------------------------------------------------

FRAMEBITS
static final int FRAMEBITSimageUpdate 的 infoflags 参数中的此标志指示多帧图像(以前绘制的)的另一个完整帧现在可以再次绘制。应该忽略 imageUpdate 回调方法的 x、y、width 和 height 参数。

另请参见:
Graphics.drawImage(java.awt.Image, int, int, java.awt.image.ImageObserver), imageUpdate(java.awt.Image, int, int, int, int, int), 常量字段值

--------------------------------------------------------------------------------

ALLBITS
static final int ALLBITSimageUpdate 的 infoflags 参数中的此标志指示现在已完成了一幅以前绘制的静态图像,并且可以其最终形式再次绘制它。应该忽略 imageUpdate 回调方法的 x、y、width 和 height 参数。

另请参见:
Graphics.drawImage(java.awt.Image, int, int, java.awt.image.ImageObserver), imageUpdate(java.awt.Image, int, int, int, int, int), 常量字段值

--------------------------------------------------------------------------------

ERROR
static final int ERRORimageUpdate 的 infoflags 参数中的此标志指示被异步跟踪的图像遇到了错误。没有更多信息可用,并且图像绘制将失败。出于方便的考虑,同时还将指定 ABORT 标志,以指示图像生成已中止。

另请参见:
imageUpdate(java.awt.Image, int, int, int, int, int), 常量字段值

--------------------------------------------------------------------------------

ABORT
static final int ABORTimageUpdate 的 infoflags 参数中的此标志指示被异步跟踪的图像在生成完成前即已中止。在没有进一步的动作以触发另一个图像生成序列的情况下,没有更多可用信息。如果在此图像更新中没有设置 ERROR 标志,则访问图像中的任何数据都会再次重新开始图像的生成(可能是从头开始)。

另请参见:
imageUpdate(java.awt.Image, int, int, int, int, int), 常量字段值
方法详细信息

imageUpdate
boolean imageUpdate(Image img,
int infoflags,
int x,
int y,
int width,
int height)当以前使用异步接口所请求的图像的信息变得可用时就调用此方法。异步接口是将 ImageObserver 对象作为参数的方法调用,如 getWidth(ImageObserver) 和 drawImage(img, x, y, ImageObserver)。这些方法要么将调用方注册为对有关总体图像本身的信息感兴趣(对于 getWidth(ImageObserver)),要么注册为对有关图像输出版本的信息感兴趣(对于调用 drawImage(img, x, y, [w, h,] ImageObserver))。
如果需要进一步的更新,则此方法应该返回 true,如果已获得所需的信息,则应返回 false。使用 img 参数传入所跟踪的图像。组合各种常量即可形成 infoflags 参数,指示哪种图像信息现在可用。对 x、y、width 和 height 参数的解释取决于 infoflags 参数的内容。

infoflags 参数应该是对下列标志按位进行 OR 运算后的结果:WIDTH、HEIGHT、PROPERTIES、SOMEBITS、FRAMEBITS、ALLBITS、ERROR、ABORT。

参数:
img - 正在观察的图像。
infoflags - 下列标志按位 OR 运算后的结果:WIDTH、HEIGHT、PROPERTIES、SOMEBITS、FRAMEBITS、ALLBITS、ERROR、ABORT。
x - x 坐标。
y - y 坐标。
width - 宽度。
height - 高度。
返回:
如果 infoflags 指示已完全加载了图像,则返回 false;否则返回 true。
另请参见:
WIDTH, HEIGHT, PROPERTIES, SOMEBITS, FRAMEBITS, ALLBITS, ERROR, ABORT, Image.getWidth(java.awt.image.ImageObserver), Image.getHeight(java.awt.image.ImageObserver), Graphics.drawImage(java.awt.Image, int, int, java.awt.image.ImageObserver)

以上是关于JAVA的drawImage方法的主要内容,如果未能解决你的问题,请参考以下文章

java中applet中的drawimage怎么用

在java中方法drawImage()的参数详细解释

java中 g.drawImage()方法如何使用

java 使用drawimage打包后不显示图片

java drawImage 如何实现旋转和缩放

JAVA Graphics类中drawImage方法怎么用