9.html

来自「写给JSP初级程序员的书」· HTML 代码 · 共 325 行 · 第 1/2 页

HTML
325
字号
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int nxpm = (((int)bi[27]&0xff)&lt;&lt;24)<BR>
&nbsp;&nbsp;| (((int)bi[26]&0xff)&lt;&lt;16)<BR>
&nbsp;&nbsp;| (((int)bi[25]&0xff)&lt;&lt;8)<BR>
&nbsp;&nbsp;| (int)bi[24]&0xff;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("X-Pixels per meter is :"+nxpm);<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int nypm = (((int)bi[31]&0xff)&lt;&lt;24)<BR>
&nbsp;&nbsp;| (((int)bi[30]&0xff)&lt;&lt;16)<BR>
&nbsp;&nbsp;| (((int)bi[29]&0xff)&lt;&lt;8)<BR>
&nbsp;&nbsp;| (int)bi[28]&0xff;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("Y-Pixels per meter is :"+nypm);<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int nclrused = (((int)bi[35]&0xff)&lt;&lt;24)<BR>
&nbsp;&nbsp;| (((int)bi[34]&0xff)&lt;&lt;16)<BR>
&nbsp;&nbsp;| (((int)bi[33]&0xff)&lt;&lt;8)<BR>
&nbsp;&nbsp;| (int)bi[32]&0xff;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("Colors used are :"+nclrused);<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int nclrimp = (((int)bi[39]&0xff)&lt;&lt;24)<BR>
&nbsp;&nbsp;| (((int)bi[38]&0xff)&lt;&lt;16)<BR>
&nbsp;&nbsp;| (((int)bi[37]&0xff)&lt;&lt;8)<BR>
&nbsp;&nbsp;| (int)bi[36]&0xff;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("Colors important are :"+nclrimp);<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (nbitcount==24)<BR>
&nbsp;&nbsp;{<BR>
&nbsp;&nbsp;// 24 位格式不包含调色板数据,但扫描行被补足到<BR>
&nbsp;&nbsp;//  4 个字节。<BR>
&nbsp;&nbsp;int npad = (nsizeimage / nheight) - nwidth * 3;<BR>
&nbsp;&nbsp;int ndata[] = new int [nheight * nwidth];<BR>
&nbsp;&nbsp;byte brgb[] = new byte [( nwidth + npad) * 3 * nheight];<BR>
&nbsp;&nbsp;fs.read (brgb, 0, (nwidth + npad) * 3 * nheight);<BR>
&nbsp;&nbsp;int nindex = 0;<BR>
&nbsp;&nbsp;for (int j = 0; j &lt; nheight; j++)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (int i = 0; i &lt; nwidth; i++)<BR>
&nbsp;&nbsp;&nbsp;{<BR>
&nbsp;&nbsp;&nbsp;ndata [nwidth * (nheight - j - 1) + i] =<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(255&0xff)&lt;&lt;24<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| (((int)brgb[nindex+2]&0xff)&lt;&lt;16)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| (((int)brgb[nindex+1]&0xff)&lt;&lt;8)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| (int)brgb[nindex]&0xff;<BR>
&nbsp;&nbsp;&nbsp;// System.out.println("Encoded Color at ("<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+i+","+j+")is:"+nrgb+" (R,G,B)= ("<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+((int)(brgb[2]) & 0xff)+","<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+((int)brgb[1]&0xff)+","<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+((int)brgb[0]&0xff)+")");<BR>
&nbsp;&nbsp;&nbsp;nindex += 3;<BR>
&nbsp;&nbsp;&nbsp;}<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nindex += npad;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>
<BR>
&nbsp;&nbsp;image = createImage<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;( new MemoryImageSource (nwidth, nheight,<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ndata, 0, nwidth));<BR>
&nbsp;&nbsp;}<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if (nbitcount == 8)<BR>
&nbsp;&nbsp;{<BR>
&nbsp;&nbsp;// 必须确定颜色数。如果 clrsused 参数大于 0,<BR>
&nbsp;&nbsp;// 则颜色数由它决定。如果它等于 0,则根据<BR>
&nbsp;&nbsp;// bitsperpixel 计算颜色数。<BR>
&nbsp;&nbsp;int nNumColors = 0;<BR>
&nbsp;&nbsp;if (nclrused &gt; 0)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nNumColors = nclrused;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>
&nbsp;&nbsp;else<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nNumColors = (1&0xff)&lt;&lt;nbitcount;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>
&nbsp;&nbsp;System.out.println("The number of Colors is"+nNumColors);<BR>
<BR>
&nbsp;&nbsp;// 某些位图不计算 sizeimage 域,请找出<BR>
&nbsp;&nbsp;// 这些情况并对它们进行修正。<BR>
&nbsp;&nbsp;if (nsizeimage == 0)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nsizeimage = ((((nwidth*nbitcount)+31) & ~31 ) &gt;&gt; 3);<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nsizeimage *= nheight;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("nsizeimage (backup) is"+nsizeimage);<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>
<BR>
&nbsp;&nbsp;// 读取调色板颜色。<BR>
&nbsp;&nbsp;int  npalette[] = new int [nNumColors];<BR>
&nbsp;&nbsp;byte bpalette[] = new byte [nNumColors*4];<BR>
&nbsp;&nbsp;fs.read (bpalette, 0, nNumColors*4);<BR>
&nbsp;&nbsp;int nindex8 = 0;<BR>
&nbsp;&nbsp;for (int n = 0; n &lt; nNumColors; n++)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;npalette[n] = (255&0xff)&lt;&lt;24<BR>
&nbsp;&nbsp;&nbsp;| (((int)bpalette[nindex8+2]&0xff)&lt;&lt;16)<BR>
&nbsp;&nbsp;&nbsp;| (((int)bpalette[nindex8+1]&0xff)&lt;&lt;8)<BR>
&nbsp;&nbsp;&nbsp;| (int)bpalette[nindex8]&0xff;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// System.out.println ("Palette Color "+n<BR>
&nbsp;&nbsp;&nbsp;+" is:"+npalette[n]+" (res,R,G,B)= ("<BR>
&nbsp;&nbsp;&nbsp;+((int)(bpalette[nindex8+3]) & 0xff)+","<BR>
&nbsp;&nbsp;&nbsp;+((int)(bpalette[nindex8+2]) & 0xff)+","<BR>
&nbsp;&nbsp;&nbsp;+((int)bpalette[nindex8+1]&0xff)+","<BR>
&nbsp;&nbsp;&nbsp;+((int)bpalette[nindex8]&0xff)+")");<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nindex8 += 4;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>
<BR>
&nbsp;&nbsp;// 读取图像数据(实际上是调色板的索引)<BR>
&nbsp;&nbsp;// 扫描行仍被补足到 4 个字节。<BR>
&nbsp;&nbsp;int npad8 = (nsizeimage / nheight) - nwidth;<BR>
&nbsp;&nbsp;System.out.println("nPad is:"+npad8);<BR>
<BR>
&nbsp;&nbsp;int  ndata8[] = new int [nwidth*nheight];<BR>
&nbsp;&nbsp;byte bdata[] = new byte [(nwidth+npad8)*nheight];<BR>
&nbsp;&nbsp;fs.read (bdata, 0, (nwidth+npad8)*nheight);<BR>
&nbsp;&nbsp;nindex8 = 0;<BR>
&nbsp;&nbsp;for (int j8 = 0; j8 &lt; nheight; j8++)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (int i8 = 0; i8 &lt; nwidth; i8++)<BR>
&nbsp;&nbsp;&nbsp;{<BR>
&nbsp;&nbsp;&nbsp;ndata8 [nwidth*(nheight-j8-1)+i8] =<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;npalette [((int)bdata[nindex8]&0xff)];<BR>
&nbsp;&nbsp;&nbsp;nindex8++;<BR>
&nbsp;&nbsp;&nbsp;}<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nindex8 += npad8;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>
<BR>
&nbsp;&nbsp;image = createImage<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;( new MemoryImageSource (nwidth, nheight,<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ndata8, 0, nwidth));<BR>
&nbsp;&nbsp;}<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<BR>
&nbsp;&nbsp;{<BR>
&nbsp;&nbsp;System.out.println ("Not a 24-bit or 8-bit Windows Bitmap, aborting...");<BR>
&nbsp;&nbsp;image = (Image)null;<BR>
&nbsp;&nbsp;}<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fs.close();<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return image;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>
&nbsp;catch (Exception e)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("Caught exception in loadbitmap!");<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>
&nbsp;return (Image) null;<BR>
&nbsp;}<BR>
</code>
<P>
您已掌握了读取位图文件的技巧。很容易对此方法进行扩展,使它能够读取单色和 16 色(4 位)格式。
<!-- end body text -->

<P>
<A NAME="bio">

<TR><TD VALIGN="TOP">
<STRONG>
<FONT SIZE="-1" FACE="Arial,Helvetica,Sans-serif">作者简介</FONT></STRONG><BR>
Jeff West 是加州圣地亚哥市的一名工程学研究生。在研究燃烧和火焰扩张的闲暇之余,他沉迷于 Java。
</TD>
</TR>
</td>
      </tr>
    </td>
  </tr>
</div>
</body>
</html>

⌨️ 快捷键说明

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