`
cloud21
  • 浏览: 396313 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

Java swing drawImage

阅读更多
图像使用的支持分布于java.applet, java.awt, 和 java.awt.image 包中。每一个图像都用一个 java.awt.Image 对象表示。除了Image 类外,java.awt 包提供了其它的基本的图像支持,例如Graphics 类的 drawImage 方法,Toolkit 对象的getImage 方法以及MediaTracker 类。在java.applet包中, Applet 类的getImage 方法使得可以很容易的使用URL加载图像。最后,java.awt.image包提供可用于创建、操纵和观察图像的 接口和类。

加载图像
AWT可以很简单的加载两种格式的图像: GIF 和 JPEG。Applet和Toolkit 类提供了getImage 方法可以使用那两种格式。像这样使用:
myImage = getImage(URL); //只能在Applet 子类里
     或者
myImage = Toolkit.getDefaultToolkit().getImage(filenameOrURL);


getImage 立即返回,因此你不必等待图像加载完而可以直接在你的程序中执行其它的操作。虽然这可以提高性能,但是有效程序需要更多的控制或者有关图像的更多信息。你 可以通过使用MediaTracker类或者实现ImageObserver接口中定义的imageUpdate方法跟踪图像的加载。
这一节也将告诉你如何轻松的使用MemoryImageSource类创建图像。

显示图像
通过传递到paintComponent方法的Graphics对象可以很容易的显示图像。你简单的在Graphics 对象上调用一个drawImage方法就可以。例如:
g.drawImage(myImage, 0, 0, this);

这一节解释drawImage的四种形式,其中的两种可以进行图像的缩放。像getImage一样,drawImage 也是异步的,即使图像还没有被全部加载或绘制也立即返回。

加载图像
这 一节描述如何得到一个图像对应的Image 对象。只要图像数据在一个 GIF 或者 JPEG 格式文件里面而且你知道它的文件名或者URL,那么从它 得到一个Image 就很简单:只要使用Applet 或者 Toolkit 中的一个的getImage方法就就可以。getImage 方法立即返 回,不检查图像数据是否存在。实际的图像加载通常直到程序第一次绘制图像时才进行。
对于很多程序,这个不可见的后台加载工作工作得很好。否则需要跟踪图像的加载过程。这一节解释如何使用MediaTracker 类和ImageObserver 接口达到目的。


--------------------------------------------------------------------------------
注意:   ImageIcon 类自动使用一个MediaTracker 加载自己的图像。
--------------------------------------------------------------------------------

最后,这节告诉你如何使用一个像MemoryImageSource这样的类轻松的创建一个图像。

使用getImage方法
这节首先讨论Toolkit 的getImage方法,然后才是Applet 的getImage 方法。
Toolkit 明了两个getImage 方法:

Image getImage(URL url) 
Image getImage(String filename) 

下 面是使用Toolkit的getImage 方法的几个例子。虽然每个Java程序和applet都可以使用这些方法, 但是 applets受通常的安 全限制。特别的,不被信任的applets 不能成功的为getImage指定一个文件名,因为不被信任的applets不能从本机文件系统加载数据。你 可以从 安全限制找到有关不被信任的applets的限制方面资料.

Toolkit toolkit = Toolkit.getDefaultToolkit();
Image image1 = toolkit.getImage("imageFile.gif");
Image image2 = toolkit.getImage(
     new URL("http://java.sun.com/graphics/people.gif"));


Applet类提供两个getImage 方法:


Image getImage(URL url)
Image getImage(URL url, String name)
只 有applets 可以使用Applet 的getImage 方法。而且Applet 的getImage 方法只有在完整的背景 (AppletContext)下才能工作。因为这个原因,这些方法在构造方法或者在一个声明一个实例变量的申明里面不能工作。你应该从一个像init这 样的方法里面调用getImage。

下面的代码范例演示了如何使用Applet 的code>getImage 方法。参考 使用AWT创建一个GUI 得到getCodeBase和getDocumentBase 方法的解释。

//在Applet子类的一个方法里:
Image image1 = getImage(getCodeBase(), "imageFile.gif");
Image image2 = getImage(getDocumentBase(), "anImageFile.jpeg");
Image image3 = getImage(
     new URL("http://java.sun.com/graphics/people.gif"));

请求和跟踪图像加载: MediaTracker 和 ImageObserver
你 可以以两种方法跟踪图像加载: MediaTracker 类和 ImageObserver 接口。 MediaTracker 类对于很多程序是足够 的。你仅仅需要创建一个MediaTracker 实例,告诉它跟踪一个或者多个图像,然后如果需要的话向MediaTracker 查询那些图像的状 态。在 提高图像动画的外观和性能里面有一个范例的解释。
动画范例展示了MediaTracker的两个特别有用的特性:请求一组图像数据的加 载并且等待它们完成加载。请求一组图像数据加载可以使用checkID和checkAll 的带一个布尔参数的形式。将参数设置为 true可以开始加载 任何还未被加载的图像。或者你可以请求加载图像然后使用waitForID和waitForAll方法等待。

ImageObserver 接口可以运行你进行比MediaTracker更紧密的跟踪。 Component 类使用它,因此组件在它们要显示的图像被加载后进行重新绘制。为了使 用 ImageObserver 接口,你需要实现ImageObserver的 imageUpdate 方法并且确保实现的对象被注册为一个图像观察 器。通常,这个注册发生在你为drawImage方法指定一个ImageObserver,就像在稍后一节描述的那样。 imageUpdate 方法在 图像的信息可见的任何时候被调用。

如果你浏览MediaTracker API 文档,你可能会注意到 Component 类定义了两个看上去有用的方法: checkImage 和 prepareImage。MediaTracker 类在很大程度上使得这些方法是不必要的。

用MemoryImageSource创建图像
在像 MemoryImageSource 类这样的图像生产者的帮助下,你可以从你的幸手涂鸦上构造图像。下面的代码范例打算创建一个100x100的图像表示一个沿X轴的从黑到蓝的渐变和沿Y轴的从黑到红的渐变。
int w = 100;
int h = 100;
int[] pix = new int[w * h];
int index = 0;
for (int y = 0; y < h; y++) {
     int red = (y * 255) / (h - 1);
     for (int x = 0; x < w; x++) {
           int blue = (x * 255) / (w - 1);
           pix[index++] = (255 << 24) | (red << 16) | blue;
     }
}
Image img = createImage(new MemoryImageSource(w, h, pix, 0, w));

显示图像
下面的代码在组件区域的左上角(0, 0)以原始大小显示一个图像:
g.drawImage(image, 0, 0, this);

下面的代码在坐标(90, 0)处显示一个被缩放为300象素宽62象素高的图像:
g.drawImage(myImage, 90, 0, 300, 62, this);

下面的代码片断展示了一个applet加载一个图像并且两次显示它,使用上面你看到的两个片断。你可以在 ImageDisplayer.java找到完整的的代码。


这个图片是该applet的GUI。要运行那个applet,单击图片。该applet将在一个新浏览窗口显示。

Graphics 类声明了下面的 drawImage 方法。它们都返回一个boolean值,虽然这个值很少被使用。如果图像图像已经被完全加载并且因此被完全绘制,返回值是true;否则,返回值是false。

boolean drawImage(Image img, int x, int y, ImageObserver observer) 
boolean drawImage(Image img, int x, int y, int width, int height, ImageObserver observer) 
boolean drawImage(Image img, int x, int y, Color bgcolor, ImageObserver observer) 
boolean drawImage(Image img, int x, int y, int width, int height, Color bgcolor, ImageObserver observer) 

drawImage 方法有下面的参数:
Image img
需要绘制的图像。
int x, int y
图像左上角坐标。
int width, int height
图像的宽度和高度(单位为象素)。
Color bgcolor
图像下面的颜色。如果图像包含透明象素时这会有用,图像将在指定颜色背景下显示。
ImageObserver observer
一个实现ImageObserver 接口的对象。它将该对象登记为一个图像观察者,因此当图像的任何新信息可见时它被通知。大多组件可以简单的指定this。
组件可以指定this作为图像观察者的原因是Component 类实现了ImageObserver 接口。当图像数据被加载时它的实现调用repaint方法,这通常是你所期望的。
drawImage 方法只要要显示的图像数据已经加载完就返回。如果你要确保drawImage只绘制完整的图像,那么你需要跟踪图像的加载。
1
0
分享到:
评论

相关推荐

    Java Swing 拼图 简单的 实例

    Java Swing 是Java GUI(图形用户界面)开发的一个重要库,它是Java Foundation Classes (JFC) 的一部分,提供了丰富的组件和接口来创建桌面应用程序。在这个"Java Swing 拼图 简单的实例"中,我们将探讨如何使用...

    Java swing中国象棋制作

    Java Swing是中国象棋游戏开发的一种常见技术选择,它是一个用于构建桌面GUI(图形用户界面)的应用程序框架。在本项目中,"Java Swing中国象棋制作"显然涉及到使用Swing库来创建一个交互式的中国象棋游戏。让我们...

    java swing自学手册

    Java Swing 是Java GUI(图形用户界面)开发的重要库,它基于Java AWT(Abstract Window Toolkit)并提供了更丰富的组件和事件处理机制。本自学手册包含了Java Swing的各种源代码示例,旨在帮助学习者深入理解Swing...

    swing小黑点移动

    Swing小黑点移动是Java Swing库中一个基础但有趣的示例,用于演示图形用户界面(GUI)元素的动态操作。在Swing中,我们可以通过编程实现组件的动画效果,例如让一个小黑点在窗口上移动。这个过程涉及到Java GUI编程...

    基于JavaSwing的游戏 --魔塔(MagicTower)

    【JavaSwing游戏开发:构建“魔塔”】 在IT领域,JavaSwing是一个用于创建图形用户界面(GUI)的工具包,它是Java Foundation Classes(JFC)的一部分。本项目利用JavaSwing来开发了一款名为“魔塔”的游戏,这是一...

    JavaSwing制作水晶效果.doc

    ### Java Swing 制作水晶效果知识点详解 #### 一、序言:Java与桌面应用开发 长期以来,“Java不适合开发桌面应用程序”的观点一直存在争议。尽管如此,Java Swing 和 Java 2D 已经有了十多年的发展历史,并且伴随...

    Java Swing画图小练习

    在Swing中,我们可以通过 `javax.imageio.ImageIO` 类读取图像文件,然后使用 `drawImage()` 方法在 `JPanel` 上显示。例如,`back.jpg` 可能被用来作为画图面板的背景。 总结一下,这个Java Swing画图小练习涵盖了...

    java swing 毛玻璃实现

    Java Swing 是Java GUI(图形用户界面)库的一部分,它允许开发者创建桌面应用程序。在Java Swing中,我们可以利用组件和布局管理器来构建丰富的用户界面。本教程将专注于一个特定的主题——"毛玻璃效果"(也称为...

    JavaSwing坦克大战

    《JavaSwing坦克大战》是一款基于Java Swing技术开发的经典坦克战斗游戏,它是初学者学习Java编程,特别是GUI(图形用户界面)设计的一个理想实践项目。在这个项目中,开发者可以深入理解Swing组件的使用,以及如何...

    Java-Swing界面的摄像头\\高拍仪抓图功能,有预览视频-使用xuggle。

    Java Swing 是Java GUI编程的一部分,它提供了一套丰富的组件库,用于创建桌面应用程序的用户界面。在Java Swing中实现摄像头或高拍仪的抓图功能,可以极大地增强应用的交互性和实用性。本教程将深入探讨如何利用...

    Java swing潜艇大战小游戏

    Java Swing潜艇大战小游戏是一款利用Java编程语言开发的桌面应用程序,主要使用了Swing库来构建游戏界面和交互逻辑。Swing是Java的标准GUI(图形用户界面)库,它提供了丰富的组件和工具,使得开发者能够创建出功能...

    java swing 画图 直线 圆 四方形 保存图像

    在Java Swing中,我们可以利用Java的图形库来创建和编辑图像。Swing是Java AWT(Abstract Window Toolkit)的一个扩展,提供了丰富的组件和图形功能,使得开发者能够构建出具有复杂图形用户界面的应用程序。本教程将...

    JAVA实现的图片大小随意拉动调整

    在Java编程语言中,Swing库提供了一种强大的机制来创建图形用户界面(GUI),其中包括显示和处理图像。本示例中的"JAVA实现的图片大小随意拉动调整"着重讲解了如何利用Swing来实现图片的动态缩放功能,让用户可以...

    Java swing 贪吃蛇游戏.zip

    Java Swing 是Java编程语言中的一个图形用户界面(GUI)工具包,它是Java Foundation Classes (JFC)的一部分。在Java Swing中创建贪吃蛇游戏,我们可以学习到以下关键知识点: 1. **Swing组件**:贪吃蛇游戏的核心是...

    Swing控件(JPanel,Container等)设置背景图片

    在Java的Swing库中,JPanel和Container是两种重要的组件,它们被广泛用于构建图形用户界面(GUI)。Swing提供了丰富的功能,包括允许开发者为这些组件设置自定义的背景图片,以提升应用的视觉效果。这篇博文主要讨论...

    Java Swing实现窗体添加背景图片的2种方法详解

    在Java Swing中,创建美观的用户界面通常需要对窗体进行一定程度的定制,其中一种常见的需求就是添加背景图片。本文将详细介绍两种在Java Swing中实现窗体添加背景图片的方法,并探讨Swing重绘过程中的`repaint()`和...

    浅析Java swing组件窗体设计.pdf

    Java Swing是一个用于开发Java应用程序用户界面的工具包。在Swing中,窗体设计是构建图形用户界面的关键部分,Swing提供了丰富的组件和容器,用于创建功能强大的用户界面。本文将分析Swing中窗体设计的组件和方法,...

    Java Swing组件写的游戏客户端.zip

    Java Swing 是Java GUI(图形用户界面)库的一部分,主要用于创建桌面应用程序,包括游戏。这个"Java Swing组件写的游戏客户端.zip"文件显然包含了使用Swing构建的一款小游戏的源代码。Swing提供了一系列组件,如...

    JavaSwing制作水晶效果.pdf

    在JavaSwing中制作水晶效果,我们可以利用其内置的绘图能力,结合自定义的绘制技巧,模拟出类似苹果风格的立体水晶UI。 首先,我们需要了解水晶效果的基本要素,通常包括以下几个方面: 1. **立体感**:这通常通过...

    Java绘图基础资料

    Java Swing 是Java编程语言中用于构建桌面应用用户界面的一个组件库。它属于Java Foundation Classes (JFC) 的一部分,提供了一套丰富的图形用户界面(GUI)构件,使得开发者可以创建功能丰富的、交互式的应用程序。...

Global site tag (gtag.js) - Google Analytics