⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 8.html

📁 写给JSP初级程序员的书
💻 HTML
📖 第 1 页 / 共 2 页
字号:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;saveEx.printStackTrace ();<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>
<BR>
&nbsp;&nbsp;}<BR>
<BR>
<BR>
&nbsp;&nbsp;/*<BR>
&nbsp;&nbsp;&nbsp;*  saveMethod 是该进程的主方法。该方法<BR> 
&nbsp;&nbsp;&nbsp;*  将调用 convertImage 方法以将内存图像转换为<BR> 
&nbsp;&nbsp;&nbsp;*  字节数组;writeBitmapFileHeader 方法创建并写入<BR> 
&nbsp;&nbsp;&nbsp;*  位图文件标头;writeBitmapInfoHeader 创建 <BR> 
&nbsp;&nbsp;&nbsp;*  信息标头;writeBitmap 写入图像。<BR> 
&nbsp;&nbsp;&nbsp;*<BR>
&nbsp;&nbsp;&nbsp;*/<BR>
&nbsp;&nbsp;private void save (Image parImage, int parWidth, int parHeight) {<BR> 
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try {<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;convertImage (parImage, parWidth, parHeight);<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;writeBitmapFileHeader ();<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;writeBitmapInfoHeader ();<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;writeBitmap ();<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;catch (Exception saveEx) {<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;saveEx.printStackTrace ();<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>
&nbsp;&nbsp;}<BR>
<BR>
<BR>
&nbsp;&nbsp;/*<BR>
&nbsp;&nbsp;&nbsp;* convertImage 将内存图像转换为位图格式 (BRG)。<BR> 
&nbsp;&nbsp;&nbsp;* 它还计算位图信息标头所用的某些信息。<BR> 
&nbsp;&nbsp;&nbsp;*<BR>
&nbsp;&nbsp;&nbsp;*/<BR>
&nbsp;&nbsp;private boolean convertImage (Image parImage, int parWidth, int parHeight) {<BR> 
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int pad;<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bitmap = new int [parWidth * parHeight];<BR> 
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PixelGrabber pg = new PixelGrabber (parImage, 0, 0, parWidth, parHeight,<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bitmap, 0, parWidth);<BR> 
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try {<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pg.grabPixels ();<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;catch (InterruptedException e) {<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace ();<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return (false);<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pad = (4 - ((parWidth * 3) % 4)) * parHeight;<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;biSizeImage = ((parWidth * parHeight) * 3) + pad;<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bfSize = biSizeImage + BITMAPFILEHEADER_SIZE +<BR> 
BITMAPINFOHEADER_SIZE;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;biWidth = parWidth;<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;biHeight = parHeight;<BR> 
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return (true);<BR> 
&nbsp;&nbsp;}<BR>
<BR>
&nbsp;&nbsp;/*<BR>
&nbsp;&nbsp;&nbsp;* writeBitmap 将象素捕获器返回的图像转换为<BR> 
&nbsp;&nbsp;&nbsp;* 所需的格式。请记住:扫描行在位图文件中是<BR> 
&nbsp;&nbsp;&nbsp;* 反向存储的!<BR> 
&nbsp;&nbsp;&nbsp;*<BR>
&nbsp;&nbsp;&nbsp;* 每个扫描行必须补足为 4 个字节。<BR> 
&nbsp;&nbsp;&nbsp;*/<BR>
&nbsp;&nbsp;private void writeBitmap () {<BR> 
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int size;<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int value;<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int j;<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int i;<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int rowCount;<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int rowIndex;<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int lastRowIndex;<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int pad;<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int padCount;<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;byte rgb [] = new byte [3];<BR> 
<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;size = (biWidth * biHeight) - 1;<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pad = 4 - ((biWidth * 3) % 4);<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (pad == 4)   // <==== 错误修正<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pad = 0;     // <==== 错误修正<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rowCount = 1;<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;padCount = 0;<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rowIndex = size - biWidth;<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lastRowIndex = rowIndex;<BR> 
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try {<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (j = 0; j < size; j++) {<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value = bitmap [rowIndex];<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rgb [0] = (byte) (value & 0xFF);<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rgb [1] = (byte) ((value >> 8) & 0xFF);<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rgb [2] = (byte) ((value >> 16) & 0xFF);<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fo.write (rgb);<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (rowCount == biWidth) {<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;padCount += pad;<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (i = 1; i <= pad; i++) {<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fo.write (0x00);<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rowCount = 1;<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rowIndex = lastRowIndex - biWidth;<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lastRowIndex = rowIndex;<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rowCount++;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rowIndex++;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//--- 更新文件大小<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bfSize += padCount - pad;<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;biSizeImage += padCount - pad;<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;catch (Exception wb) {<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wb.printStackTrace ();<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>
<BR>
&nbsp;&nbsp;&nbsp;}  <BR>
<BR>
&nbsp;&nbsp;/*<BR>
&nbsp;&nbsp;&nbsp;* writeBitmapFileHeader 将位图文件标头写入文件中。<BR> 
&nbsp;&nbsp;&nbsp;*<BR>
&nbsp;&nbsp;&nbsp;*/<BR>
&nbsp;&nbsp;private void writeBitmapFileHeader () {<BR> 
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try {<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fo.write (bfType);<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fo.write (intToDWord (bfSize));<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fo.write (intToWord (bfReserved1));<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fo.write (intToWord (bfReserved2));<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fo.write (intToDWord (bfOffBits));<BR> 
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;catch (Exception wbfh) {<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wbfh.printStackTrace ();<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>
<BR>
&nbsp;&nbsp;}<BR>
<BR>
&nbsp;&nbsp;/*<BR>
&nbsp;&nbsp;&nbsp;*<BR>
&nbsp;&nbsp;&nbsp;* writeBitmapInfoHeader 将位图信息标头<BR> 
&nbsp;&nbsp;&nbsp;* 写入文件中。<BR> 
&nbsp;&nbsp;&nbsp;*<BR>
&nbsp;&nbsp;&nbsp;*/<BR>
<BR>
&nbsp;&nbsp;private void writeBitmapInfoHeader () {<BR> 
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try {<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fo.write (intToDWord (biSize));<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fo.write (intToDWord (biWidth));<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fo.write (intToDWord (biHeight));<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fo.write (intToWord (biPlanes));<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fo.write (intToWord (biBitCount));<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fo.write (intToDWord (biCompression));<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fo.write (intToDWord (biSizeImage));<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fo.write (intToDWord (biXPelsPerMeter));<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fo.write (intToDWord (biYPelsPerMeter));<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fo.write (intToDWord (biClrUsed));<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fo.write (intToDWord (biClrImportant));<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;catch (Exception wbih) {<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wbih.printStackTrace ();<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>
<BR>
&nbsp;&nbsp;}<BR>
<BR>
<BR>
&nbsp;&nbsp;/*<BR>
&nbsp;&nbsp;&nbsp;*<BR>
&nbsp;&nbsp;&nbsp;* intToWord 将整数转换为单字,返回值<BR> 
&nbsp;&nbsp;&nbsp;* 存储在一个双字节数组中。<BR> 
&nbsp;&nbsp;&nbsp;*<BR>
&nbsp;&nbsp;&nbsp;*/<BR>
&nbsp;&nbsp;private byte [] intToWord (int parValue) {<BR> 
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;byte retValue [] = new byte [2];<BR> 
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;retValue [0] = (byte) (parValue & 0x00FF);<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;retValue [1] = (byte) ((parValue >> 8) & 0x00FF);<BR> 
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return (retValue);<BR> 
<BR>
&nbsp;&nbsp;}<BR>
<BR>
&nbsp;&nbsp;/*<BR>
&nbsp;&nbsp;&nbsp;*<BR>
&nbsp;&nbsp;&nbsp;* intToDWord 将整数转换为双字,返回值<BR> 
&nbsp;&nbsp;&nbsp;* 存储在一个 4 字节数组中。<BR> 
&nbsp;&nbsp;&nbsp;*<BR>
&nbsp;&nbsp;&nbsp;*/<BR>
&nbsp;&nbsp;private byte [] intToDWord (int parValue) {<BR> 
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;byte retValue [] = new byte [4];<BR> 
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;retValue [0] = (byte) (parValue & 0x00FF);<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;retValue [1] = (byte) ((parValue >> 8) & 0x000000FF);<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;retValue [2] = (byte) ((parValue >> 16) & 0x000000FF);<BR> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;retValue [3] = (byte) ((parValue >> 24) & 0x000000FF);<BR> 
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return (retValue);<BR> 
<BR>
&nbsp;&nbsp;}<BR>
<BR>
}<BR>
</code>
<P>
<FONT SIZE="+1"><STRONG>小结</STRONG></FONT><BR>
这就是所要做的全部工作。我确信您将会发现这个类很有用,因为到 JDK 1.1.6 为止,Java 不支持用任何常用的格式保存图像。JDK 1.2 将支持创建 JPEG 图像,但不支持创建位图。所以这个类仍将填补 JDK1.2 中的空白。 
<P>
如果您使用这个类并发现了改进它的方法,请通知我!下面的个人简历中有我的电子邮件地址。
<!-- end body text -->
<P>
<A NAME="bio">

<TR><TD VALIGN="TOP">
<STRONG>
<FONT SIZE="-1">作者简介</FONT></STRONG><BR>
jeanpierre.dube Jean-Pierre Dub&eacute; 是一名自由 Java 咨询者。他于 1988 年注册创办了 Infocom公司。从那时起,Infocom 已承接并开发了几套应用程序,涉及的领域包括制造业、文档管理和大规模输电线管理。他有丰富的 C 语言、Visual Basic 和 Java(最近)编程经验,他的公司现在主要使用 Java 语言。 
Infocom 最近的一个项目是一种图形 API,其测试版很快就会面市。 
        </td>
      </tr>
    </td>
  </tr>
</body>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -