快速业务通道

在Java应用程序中创建图像 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-24
iteSize 为边长的正方形。图像其它部分的尺寸值都与这个边长相关。实际上这里只有两个几何实体,一条线和一个圆,都在不同位置和方向重复出现。如果我们创建一个Line2D.Double对象代表线,创建一个Ellipse2D.Double对象代表圆,那么我们就可以通过移动用户坐标系和画这两个对象中的一个或其它的对象而画出整个图像。

在Java应用程序中创建图像(2)

时间:2010-03-27

如果是按真正面向对象的方法,应该定义一个类代表一个子图形,可能是作为BufferedImage 的一个子类,但由于我们是在探索使用 BufferedImage对象的技巧,因此用一个createSprite()方法来画出 BufferedImage对象上的子图形会更适合我们的目的。因为该方法只是我们的applet类的一个成员,所以我们将为applet 添加数据成员以存储任何需要的数据。您可以把我们将使用的数据成员插入到 applet类中,如下所示:

double totalAngle; // Current angular position of sprite double spriteAngle; // Rotation angle of sprite about its center ImagePanel imagePanel; // Panel to display animation BufferedImage sprite; // Stores reference to the sprite int spriteSize = 100; // Diameter of the sprite Ellipse2D.Double circle; // A circle - part of the sprite Line2D.Double line; // A line - part of the sprite // Colors used in sprite Color[] colors = {Color.red , Color.yellow, Color.green , Color.blue, Color.cyan, Color.pink , Color.magenta, Color.orange}; java.util.Timer timer; // Timer for the animation long interval = 50; // Time interval msec between repaints

这些成员的一般用途可以从注释中清楚地看到。下面我们要看一看开发代码时它们是怎样被使用的。

createSprite()方法需要做的第一件事就是创建 BufferedImage对象 sprite,然后我们还需要一个Graphics2D对象用于在sprite图像上绘画。下面就是完成这些操作的代码:

BufferedImage createSprite(int spriteSize) {  // Create image with RGB and alpha channel  BufferedImage sprite = new BufferedImage(spriteSize, spriteSize,  BufferedImage.TYPE_INT_ARGB);  Graphics2D g2D = sprite.createGraphics(); // Context for buffered image  // plus the rest of the method... }

sprite对象的宽和高的值都是spriteSize,图像的类型为TYPE_INT_ARGB,就是说每个像素的alpha值和颜色组件是以一个单独的int值存储的,而颜色是以 8 位的红、绿、蓝组件的形式存储的。这意味着我们的sprite图像将占用 40,000 字节,这只是浏览一个网页会占用的内存的很小一部分。而这并不影响网页的下载时间,因为在执行 applet 的时候,这部分内存是在本地机器上被分配的。除了作为网页本身的HTML 文件的内容外,下载时间还取决于 applet 的.class 文件的大小,以及在它执行时下载的图像或其它文件。

创建一个透明的背景

在sprite图像中,alpha 通道是很重要的,因为我们希望背景能完全透明。在绘画过程中,只有 sprite对象本身应该是可见的,而不是整个100×100 的矩形图像。我们可以很容易地实现这一目的,只要开始先使整个sprite图像区域透明(即,alpha值为0.0f),然后把我们想要画的图形绘制在上面,使之不透明(alpha值为1.0f)。以下是使整个图像透明的代码:

// Clear image with transparent alpha by drawing a rectangle g2D.setComposite(AlphaComposite.getInstance(AlphaComposite.CLEAR, 0.0f)); Rectangle2D.Double rect = new Rectangle2D.Double(0,0,spriteSize,spriteSize); g2D.fill(rect);

我们首先使用 AlphaComposite对象按照 CLEA

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号