java drawimage()方法

转载自  java 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只绘制完整的图像,那么你需要跟踪图像的加载。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/328701.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

老师不能把你怎样,但外面的世界可以!

来源 | 菁优网 本文是一位老师讲述的三段小故事&#xff0c;告诉各位家长及孩子&#xff1a; 亲爱的孩子&#xff0c;老师是不能把你怎样&#xff0c;但外面的世界可以。 1. 我有一个学生&#xff0c;喜欢钻研奥数&#xff0c;却走路慢慢吞吞总爱迟到&#xff0c;同学给他起了…

TagHelper是怎么实现的

众所周知&#xff0c;在asp.net core中编写Razor视图的时候&#xff0c;用了一种新的写法--TagHelper 那这个TagHelper是怎么回事呢? 首先来看看TagHelper的项目位置&#xff0c;它是位于Microsoft.AspNetCore.Mvc.TagHelpers。 如果看到project.json&#xff0c;可以发现&…

java电商面试介绍

写博客 前两个项目采用的是ssh框架搭建的&#xff0c;最近的项目采用的是ssm框架搭建的。在实际开发中&#xff0c;我觉得这两个框架&#xff0c;他们最大的区别在于hibernate与mybatis的区别。 Hibernate与mybatis相比较&#xff0c;mybatis更为轻便、灵活&#xff0c;容易…

java 程序实现对图片的压缩生成缩略图并可设定长宽、尺寸压缩率、图片质量

转载自 java 程序实现对图片的压缩生成缩略图并可设定长宽、尺寸压缩率、图片质量 之前是在另一位高手的上传内容中学习到的&#xff0c;并将其代码根据我的需求进行了修改&#xff0c;参考位置&#xff1a;http://jiangpin1987.javaeye.com/blog/749690参考代码&#xff1a;…

List<Map<String,Object>>集合按照map中的某个值进行排序

List<Map<String,Object>>集合按照map中的某个值进行排序 举例&#xff1a; public void test5(){List<Map<String, Object>> list new ArrayList<Map<String, Object>>();Map<String, Object> map1 new HashMap<String, Obj…

面试

Java简历与面试 置顶2017年10月20日 10:04:29 阅读数&#xff1a;40142 Java就业指导 想要成为合格的Java程序员或工程师到底需要具备哪些专业技能&#xff0c;面试者在面试之前到底需要准备哪些东西呢&#xff1f;本文陈列的这些内容既可以作为个人简历中的内容&#xff0c…

全文搜索引擎 Elasticsearch 入门教程

转载自 全文搜索引擎 Elasticsearch 入门教程全文搜索属于最常见的需求&#xff0c;开源的 Elasticsearch &#xff08;以下简称 Elastic&#xff09;是目前全文搜索引擎的首选。 它可以快速地储存、搜索和分析海量数据。维基百科、Stack Overflow、Github 都采用它。Elastic…

写给实习生的第一天

实习生&#xff08;intern&#xff09;和新员工有所区别。实习生仿佛一个长达12周&#xff08;三个月&#xff09;的面试&#xff0c;一起工作&#xff0c;一起解决问题。在最后有答辩和debrief meeting讨论结果。可能通过了&#xff0c;最后公司给offer&#xff1b;也可能没有…

项目里远程调用POST/GET接口时使用的方法

一、远程调用post接口时的方法 方法一&#xff1a; 这个方式的querys传的是参数&#xff08;参数可是单个参数/对象&#xff09; host指的是远程调用的主机地址 headers指的是头信息&#xff08;可有可无&#xff09; body指的是字符集的编码格式 public static String doPo…

再讲IQueryablelt;Tgt;,揭开表达式树的神秘面纱

接上篇《先说IEnumerable&#xff0c;我们每天用的foreach你真的懂它吗&#xff1f;》 最近园子里定制自己的orm那是一个风生水起&#xff0c;感觉不整个自己的orm都不好意思继续混博客园了&#xff08;开个玩笑&#xff09;。那么在此之前我们有必要仔细了解下 IQueryable<…

Java进阶之路——从初级程序员到架构师,从小工到专家

转载自 Java进阶之路——从初级程序员到架构师&#xff0c;从小工到专家怎样学习才能从一名Java初级程序员成长为一名合格的架构师&#xff0c;或者说一名合格的架构师应该有怎样的技术知识体系&#xff0c;这是不仅一个刚刚踏入职场的初级程序员也是工作三五年之后开始迷茫…

堆排序原理及其实现(C++)

https://blog.csdn.net/lzuacm/article/details/52853194 堆排序原理及其实现(C) 1. 堆排序的引入 我们知道简单选择排序的时间复杂度为O(n^2)&#xff0c;熟悉各种排序算法的朋友都知道&#xff0c;这个时间复杂度是很大的&#xff0c;所以怎样减小简单选择排序的时间复杂度…

Redis集群~StackExchange.redis连接Twemproxy代理服务器

本文是Redis集群系列的一篇文章&#xff0c;主要介绍使用StackExchange.Redis进行Twemproxy&#xff08;文中简称TW&#xff09;代理服务的连接过程&#xff0c;事务上&#xff0c;对于&#xff34;&#xff37;来说&#xff0c;我们需要理解一下它的物理架构&#xff0c;它类似…

List集合转分页

当所要查询的数据不能通过框架自带的分页和自定义分页实现的时候&#xff0c;一般查询出来的数据大多数情况都是list的形式。这就牵扯到把list集合转成分页&#xff0c;实现分页操作。   以下就是list转page的工具 /*** list转page进行手动分页* param list 要转的list集合*…

内存转换Image到Icon

转载自 内存转换Image到Icon 时候我们需要在内存中转换Image格式到Icon 根据经验&#xff0c;通常我们应该可以这样做 Image image xxxx;///假设这里已经有一个Image对象 System.IO.MemoryStream mStream new System.IO.MemoryStream();///创建内存流 image.Save(mStream,…

同步异步

https://blog.csdn.net/ideality_hunter/article/details/53453285 同步和异步&#xff0c;区别 2016年12月04日 11:20:17 阅读数&#xff1a;60233 同步&#xff1a; 同步的思想是&#xff1a;所有的操作都做完&#xff0c;才返回给用户。这样用户在线等待的时间太长&…

不想穷下去就请看!

不想穷下去就请看!          1、记住&#xff0c;平均每天看电视超过三个小时以上的&#xff0c;一定都是那些月收入不超过两千元的&#xff0c;如果你想要月收入超过两千&#xff0c;请不要把时间浪费在电视上。同样的道理&#xff0c;那些平均每天玩网络游戏或聊天超过…

.NET开发者如何使用MyCat

背景 在开发中&#xff0c;我们设计的系统的效率在很大程度上会受到数据库引擎单表的性能制约&#xff0c;因此在数据量庞大、或记录过宽时&#xff0c;需要考虑分库分表从而减轻数据库压力&#xff0c;提升查询效率。此外配置读写分离&#xff0c;让主数据库处理事务性查询&am…

关于Icon,Image,ImageIcon的简单的对比参考 上篇

转载自 关于Icon&#xff0c;Image&#xff0c;ImageIcon的简单的对比参考 上篇其实就算是现在&#xff0c;我还是有不少地方概念模糊&#xff0c;但是下面的内容是是没有什么问题的。稍微介绍一下&#xff0c;或许有些地方我无法解释&#xff1a; 大部分内容都是查的Java SE…

移动端为什么拿不到本地运行的web工程数据

原因很简单 连接的是远程服务器的tomcat啊啊啊啊啊