用Java读取ico文件,用ico做新的鼠标图标。

Java读取ico文件,用ico做新的鼠标图标。<o:p></o:p>

<o:p> </o:p>

昨天需要在程序里用ico做鼠标,但在jdk中没找到可以读取ico文件的方法。只好到网上找,在百度里搜索了半天也没看出个啥,用google搜索 ‘java ico一下就搜索出来办法了。<o:p></o:p>

<o:p> </o:p>

0 前言<o:p></o:p>

<o:p> </o:p>

进入下面这个地址:<o:p></o:p>

http://www.acproductions.de/commercial/aclibico/<o:p></o:p>

<o:p> </o:p>

Java library for ICO files © 2003-2006 Christian Treber<o:p></o:p>

<o:p> </o:p>

感谢Christian Treber这个老外的作品,可以让我方便的读取ico,而且使用是免费的。<o:p></o:p>

<o:p> </o:p>

<o:p> </o:p>

<o:p> </o:p>

<o:p> </o:p>

1下载这个包: aclibico-2.1.zip<o:p></o:p>

<o:p> </o:p>

2 解压缩得到这个jar文件:aclibico-2.1.jar<o:p></o:p>

<o:p> </o:p>

这个就是我们需要的可以把ico转换成image的东<o:p></o:p>

<o:p> </o:p>

下面是网站上关于这个包的介绍:<o:p></o:p>

What it Does<o:p></o:p>

·  Read ICO files from file, stream, buffer, URL <o:p></o:p>

·  Convert ICO file into Java Image objects <o:p></o:p>

What it Needs<o:p></o:p>

·  Java Runtime 1.4 or higher <o:p></o:p>

What it Costs<o:p></o:p>

·  Nothing - it's for free. <o:p></o:p>

<o:p></o:p>

<o:p> </o:p>

<o:p> </o:p>

在网站上竟然没有发现一个如何使用这个包的说明例子:只能自己看API了。<o:p></o:p>

<o:p> </o:p>

3 在下载下来的aclibico-2.1.zip压缩包里有AC.lib-ICOJavaDoc.pdfAPI文档<o:p></o:p>

<o:p> </o:p>

因为是pdf文档,找起api来很麻烦,所以把需要的api直接截图下来,方便查看<o:p></o:p>

<v:shapetype o:spt="75" coordsize="21600,21600" filled="f" stroked="f" id="_x0000_t75" path=" m@4@5 l@4@11@9@11@9@5 xe" o:preferrelative="t"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0 "></v:f><v:f eqn="sum @0 1 0 "></v:f><v:f eqn="sum 0 0 @1 "></v:f><v:f eqn="prod @2 1 2 "></v:f><v:f eqn="prod @3 21600 pixelWidth "></v:f><v:f eqn="prod @3 21600 pixelHeight "></v:f><v:f eqn="sum @0 0 1 "></v:f><v:f eqn="prod @6 1 2 "></v:f><v:f eqn="prod @7 21600 pixelWidth "></v:f><v:f eqn="sum @8 21600 0 "></v:f><v:f eqn="prod @7 21600 pixelHeight "></v:f><v:f eqn="sum @10 21600 0 "></v:f></v:formulas><v:path o:extrusionok="f" o:connecttype="rect" gradientshapeok="t"></v:path><o:lock v:ext="edit" aspectratio="t"></o:lock></v:shapetype><v:shape coordsize="21600,21600" id="_x0000_i1025" type="#_x0000_t75" style="WIDTH: 533.25pt; HEIGHT: 201pt"><v:imagedata src="用Java读取ico文件.files/image001.png" o:title=""></v:imagedata></v:shape><o:p></o:p>

<o:p> 用Java读取ico文件,用ico做新的鼠标图标。_第1张图片</o:p>

<o:p></o:p>

<o:p>用Java读取ico文件,用ico做新的鼠标图标。_第2张图片</o:p>

<v:shape coordsize="21600,21600" id="_x0000_i1026" type="#_x0000_t75" style="WIDTH: 528.75pt; HEIGHT: 27pt"><v:imagedata src="用Java读取ico文件.files/image003.png" o:title=""></v:imagedata></v:shape><o:p></o:p>

<v:shape coordsize="21600,21600" id="_x0000_i1027" type="#_x0000_t75" style="WIDTH: 528pt; HEIGHT: 291.75pt"><v:imagedata src="用Java读取ico文件.files/image005.png" o:title=""></v:imagedata></v:shape><o:p></o:p>

<o:p> </o:p>

<o:p> </o:p>

4 在程序使用aclibico-2.1.jar<o:p></o:p>

<o:p> </o:p>

在工程的路径下添加这个包,就可以转换ico文件了。<o:p></o:p>

<o:p> </o:p>

下面是我如何使用这个包的<o:p></o:p>

//导入aclibico-2.1.jarICOFile类,这是我们需要的转换ico文件的类<o:p></o:p>

import com.ctreber.aclib.image.ico.ICOFile;<o:p></o:p>

//ico所在的路径表示成一个url<o:p></o:p>

String tmp = this.baseUrl + "/ico/" + icoName + ".ico";<o:p></o:p>

URL u = new URL(tmp);<o:p></o:p>

//这里就是读取ico文件的方法。我是通过一个url读取的。<o:p></o:p>

ICOFile ico = new ICOFile(u); <o:p></o:p>

//可能ico文件里不止一个图片,返回图片列表<o:p></o:p>

java.util.List list = ico.getImages();<o:p></o:p>

Image image = null;<o:p></o:p>

//因为我确定我读取的ico里只包括一张图片,所以我判定是否为空。然后取出一张来,可能里面有好几张。可以都取出来。<o:p></o:p>

if (!list.isEmpty()) {<o:p></o:p>

//不为空我就取出那张图片来<o:p></o:p>

   image = (Image) list.get(0); <o:p></o:p>

}<o:p></o:p>

//我读取的ico16*16的,我想把它弄大一点点,所以把它拉伸20*20.sun的图象处理api真方便,只要一行代码。<o:p></o:p>

image = image.getScaledInstance(20, 20, Image.SCALE_SMOOTH); <o:p></o:p>

//最后,我把这张20*20的图片做为我新的鼠标图案,在程序里就可以直接使用新的鼠标图案了<o:p></o:p>

Cursor newCursor = Toolkit.getDefaultToolkit().createCustomCursor(image, new Point(10, 10), cursorName); <o:p></o:p>

<o:p> </o:p>

5 结束语<o:p></o:p>

这个包使用起来还是很方便的,而且很小。这样在程序里做GUI的鼠标图案就很方便了。<o:p></o:p>

另外用bmp.jpeg。。等其他官方jdk支持的图象格式也能做鼠标图案,不过要稍微麻烦点。(要过滤掉一些颜色做透明化处理)<o:p></o:p>

<o:p> </o:p>

这是我的一些看法,不知道有没有错,有不对的地方,请看这篇文章的朋友指出来,谢谢。

你可能感兴趣的:(java,jdk,F#,ext,百度)