博文

用 Java 保存位图文件(2007-08-18 14:45:00)

摘要:教程 -- 其中包括将图像对象写入位图文件的全部代码

作者 Jean-Pierre Dubé
摘要
虽然 Java 提供了几种打开图像的机制,但保存图像并不是它的强项。这篇技巧将讲述如何将图像保存在 24 位位图文件中。另外,Jean-Pierre 还提供了将图像文件写入位图文件所需的全部代码。 这篇技巧是 Java 技巧 43 的补充,那篇技巧说明了在 Java 应用程序中加载位图文件的过程。本月我再提供一篇教程,说明如何将图像保存在 24 位位图文件中,其中还包含将图像对象写入位图文件的代码片断。
如果您在 Microsoft Windows 环境中工作,那么创建位图文件的功能将为您提供许多方便。例如,在我的上一个项目中,我必须将 Java 与 Microsoft Access 对接。Java 程序允许用户在屏幕上绘图。这幅图随后被打印到 Microsoft Access 报表中。由于 Java 不支持 OLE,我的唯一选择就是创建该图的一个位图文件,并通知 Microsoft Access 报表在何处能找到这个位图文件。如果您写过向剪贴板发送图像的应用程序,则这个技巧可能对您有用 -- 尤其是当您将这个信息传递给另一个应用程序时。
位图文件的格式
位图文件格式支持 4 位 RLE(行程长度编码)以及 8 位和 24 位编码。因为我们只处理 24 位格式,所以下面我们查看一下该文件的结构。
位图文件分为三个部分。我已将它们列在下面。
第 1 部分:位图文件的标头
标头包含位图文件的类型大小信息和版面信息。结构如下(摘自 C 语言结构定义):
typedef struct tagBITMAPFILEHEADER {
   UINT bfType;
   DWORD bfSize;
   UINT bfReserved1;
   UINT bfReserved2;
   DWORD bfOffBits;
}BITMAPFILEHEADER;

下面是对这个清单中的代码元素的说明:
......

阅读全文(278) | 评论:0

JAVA代码编写程序的基本规范 (2007-08-13 22:37:00)

摘要:1.Java命名规范 1.1 Package 的命名 Package 的名字应该都是由一个小写单词组成,例如:net.ebseries.modules。 1.2 Class 的命名 Class 的名字必须由大写字母开头而其他字母都小写的单词组成,例如:DataFile或InfoParser。 1.3 Class 变量的命名 变量的名字可大小写混用,但首字符应小写。词由大写字母分隔,限制用下划线,限制使用美元符号($),因为这个字符对内部类有特殊的含义。如: inputFileSize。 类中的属性不能定义为public变量直接存取,而是定义成protect变量来防止继承类使用他们并编写get/set方法。 1.4 Class 属性(成员变量)使用 Class 属性(成员变量)使用一定要加前缀this或super标识对应的成员变量,以增加程序的可读性。 1.5 Static Final 变量的命名 Static Final 变量的名字应该都大写,并且指出完整含义,例如:final MAXUPLOADFILESIZE=1024。 1.6 方法的命名 方法名应该是动词,大小写可混用,但首字母应小写。在每个方法名内,大写字母将词分隔并限制使用下划线。参数的名字必须和变量的命名规范一致,问题参数名是否采用以下划线开始作为统一标识,如setCounter(int _size),以标识成员变量size和传入参数_size区别。使用有意义的参数命名,如果可能的话,使用和要赋值的字段一样的名字: setCounter(int size){ this.size = size; } 1.7 数组的命名 数组应该总是用下面的方式来命名:byte[] buffer;而不是:byte buffer[]; 2.代码格式 2.1 代码样式 代码应该用 unix 的格式,而不是 windows 的(比如:回车变成回车+换行) 2.2 文档化 必须用 javadoc 来为类生成文档。不仅因为它是标准,这也是被各种 java 编译器都认可的方法。 2.3 缩进 缩进应该是每行4个空格. 不要在源文件中保存Tab字符. 在使用不同的源代码管理工具时Tab字符将因为用户设置的不同而扩展为不同的宽度. 2.......

阅读全文(1678) | 评论:0

Jbuilder里光标错位问题的解决办法(2007-06-05 22:31:00)

摘要:Jbuilder里光标错位问题的解决办法 
 
这是个老问题了,很多地方说的不清楚或者太麻烦,或者是解决了错位问题后汉字又显示乱码,总之挺让人头痛,下面就教给你最简单的解决办法: 1. 用记事本打开C:\JBuilder9\jdk1.4\jre\lib\font.properties.zh文件。 2. JBuilder里默认的字体是dialoginput,所以你只要改下面几行就行: 3. dialoginput.bold.0=Courier New,ANSI_CHARSET 上面一行改成 dialoginput.bold.0=Courier New Bold,ANSI_CHARSET 4. dialoginput.italic.0=Courier New,ANSI_CHARSET 上面一行改成 dialoginput.italic.0=Courier New Italic,ANSI_CHARSET 5. dialoginput.bolditalic.0=Courier New ,ANSI_CHARSET 上面一行改为 dialoginput.bolditalic.0=Courier New Bold Italic,ANSI_CHARSET 6. 重新运行JBuilder. 7. 搞定!(看出规律来了么?JBuilder默认的字体是dialoginput,所以其他选项不用动,如果你选择其他字体,也是这么个改法)
 
 
......

阅读全文(1844) | 评论:0

优化JAVA程序设计和编码(2006-09-10 22:45:00)

摘要: 三.优化JAVA程序设计和编码,提高JAVA程序性能的一些方法。 通过使用一些前面介绍过的辅助性工具来找到程序中的瓶颈,然后就可以对瓶颈部分的代码进行优化。一般有两种方案:即优化代码或更改设计方法。我们一般会选择后者,因为不去调用以下代码要比调用一些优化的代码更能提高程序的性能。而一个设计良好的程序能够精简代码,从而提高性能。 下面将提供一些在JAVA程序的设计和编码中,为了能够提高JAVA程序的性能,而经常采用的一些方法和技巧。 1.对象的生成和大小的调整。 JAVA程序设计中一个普遍的问题就是没有好好的利用JAVA语言本身提供的函数,从而常常会生成大量的对象(或实例)。由于系统不仅要花时间生成对象,以后可能还需花时间对这些对象进行垃圾回收和处理。因此,生成过多的对象将会给程序的性能带来很大的影响。 例1:关于String ,StringBuffer,+和append JAVA语言提供了对于String类型变量的操作。但如果使用不当,会给程序的性能带来影响。如下面的语句: String name=new String(“HuangWeiFeng”); System.out.println(name+”is my name”); 看似已经很精简了,其实并非如此。为了生成二进制的代码,要进行如下的步骤和操作。 (1) 生成新的字符串 new String(STR_1); (2) 复制该字符串。 (3) 加载字符串常量”HuangWeiFeng”(STR_2); (4) 调用字符串的构架器(Constructor); (5) 保存该字符串到数组中(从位置0开始) (6) 从java.io.PrintStream类中得到静态的out变量 (7) 生成新的字符串缓冲变量new StringBuffer(STR_BUF_1); (8) 复制该字符串缓冲变量 (9) 调用字符串缓冲的构架器(Constructor); (10) 保存该字符串缓冲到数组中(从位置1开始) (11) 以STR_1......

阅读全文(1541) | 评论:0

java的环境变量问题(2006-09-05 15:54:00)

摘要:一、关于环境变量
1、JAVA需要什么样的环境变量,这些环境变量有什么作用?
    JAVA程序能够顺利编译需要两个环境变量,一个是PATH(path),一个是CLASSPATH(classpath)。那么这两个环境变量代表什么呢?或者说究竟在JAVA程序编译中有什么作用呢?这就要涉及到WINDOWS的基本知识了。在WINDOWS环境中,每一条能用的指令都保存在硬盘的“某个角落”,比如说指令NOTEPAD(WINDOWS的记事本指令,在C:\WINNT目录下),那么在DOS命令提示符下直接输入NOTEPAD就可以打开记事本了。但是一旦我们把C:\WINNT目录下的NOTEPAD.EXE这个可执行文件移开(比如说我们现在把它“剪切”到D盘根目录下)我们再在DOS提示符下直接输入NOTEPAD时就无法再打开记事本了,但是我们在DOS下改变路径输入D:\NOTEPAD(或者先输入cd D: 在输入NOTEPAD也行)就可以打开记事本了。这就是说在我们直接输入NOTEPAD的时候,其实其默认路径就是C:\WINN。假设我们要运行一个JAVA程序(hello.java)就要先把它的class文件移动到JAVA里的bin目录下  然后打开DOS,把路径改到JAVA的BIN目录下 执行java hello.class,一次无所谓 但是每次都要这样去做未免太麻烦。还好WINDOWS提供了一个PATH环境变量,他的作用就是现在这个变量的值路径中去找,如果找到了要运行的EXE就运行,否则失败。如果我们把JAVA里的bin目录这个路径赋给path那么下次我在运行java这个命令的时候,即便是直接输入DOS也能够在path变量中找到JAVA的bin目录下的java指令了。
    下面说说,classpath环境变量。不知道各位注意到没有,我上面说的那句话——“假设我们要运行一个JAVA程序(hello.java)就要先把它的class文件移动到JAVA里的bin目录下”,为什么要这样做呢?因为我们在用到java hello.class这条指令的时候,DOS不知道hello.class这个文件在哪里,他就先到当前目录中去找,如果找到就运行,否则失败。当然,如果说hello......

阅读全文(2244) | 评论:1