﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-zhangxl_blog-文章分类-common</title><link>http://www.blogjava.net/zhanglongsr/category/10832.html</link><description>路漫漫其修远兮，吾将上下而求索！</description><language>zh-cn</language><lastBuildDate>Sun, 04 May 2008 14:11:45 GMT</lastBuildDate><pubDate>Sun, 04 May 2008 14:11:45 GMT</pubDate><ttl>60</ttl><item><title>java下24bit位图转化为16bit位图实现</title><link>http://www.blogjava.net/zhanglongsr/articles/190616.html</link><dc:creator>zhangxl</dc:creator><author>zhangxl</author><pubDate>Thu, 03 Apr 2008 06:43:00 GMT</pubDate><guid>http://www.blogjava.net/zhanglongsr/articles/190616.html</guid><wfw:comment>http://www.blogjava.net/zhanglongsr/comments/190616.html</wfw:comment><comments>http://www.blogjava.net/zhanglongsr/articles/190616.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhanglongsr/comments/commentRss/190616.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhanglongsr/services/trackbacks/190616.html</trackback:ping><description><![CDATA[
		<p align="left">
				<font size="2">关于bmp文件内部存储格式参看:http://www.yymcu.com/resource/BMP%CE%C4%BC%FE%B8%F1%CA%BD%B7%D6%CE%F6.htm<br />以下是转换的具体java实现,已经通过单元测试,copy之后能直接使用:<br />public class <font color="#ff6600">T<strong>ransactionBmpTo16Bit</strong></font>{<br /> private String resFilePath;<br /> private String desFilePath;<br /> private Bmp currentBmp = null;<br /> <br /> public TransactionBmpTo16Bit(String resFilePath,String desFilePath){<br />  this.resFilePath = resFilePath;<br />  this.desFilePath = desFilePath;<br /> }<br /> <br /> /**<br />  * 把24bit的bmp图像转换为16bit的图像<br />  * <br />  * @return<br />  */<br /> public boolean <strong>transacte</strong>(){<br />  currentBmp = new Bmp();<br />  try {<br />   byte[] fileContent = currentBmp.loadBmp(resFilePath);<br />   Bmp desBmp = new Bmp();<br />   byte[] changeContent = this.changeContent(fileContent);<br />   desBmp.setCurrent(changeContent);<br />   desBmp.save(desFilePath);<br />  } catch (IOException e) {<br />   e.printStackTrace();<br />   return false;<br />  } catch (BusinessException e) {<br />   e.printStackTrace();<br />   return false;<br />  }<br />  return true;<br /> }<br /> <br /> /**<br />  * 获得新文件的大小<br />  * <br />  * @return<br />  */<br /> private int getNewFileSize(){<br />  return  currentBmp.getWeight()*currentBmp.getHight()*2+currentBmp.getDataOffset();<br /> }<br /> <br /> private byte[] changeContent(byte[] current){<br />  <br />  int newSize = this.getNewFileSize();<br />  byte[] newByt = new byte[newSize];<br />  for(int i=0;i&lt;currentBmp.getDataOffset();i++){<br />   newByt[i] = current[i];<br />  }<br />  /*设置新的位图大小*/<br />  byte[] sbt = NumberConversion.intToBytes(newSize,4);<br />  for(int i=2;i&lt;6;i++){<br />   newByt[i]=sbt[5-i];<br />  }<br />  /*设置新的像素位数*/<br />  byte[] pixDigit = NumberConversion.intToBytes(16,2);<br />  newByt[28] = pixDigit[1];<br />  newByt[29] = pixDigit[0];<br />  <br />  <br />  //TODO 获得转化后的数据实现<br />  int dataSize = newSize-54;<br />  <br />  byte[] newData = new byte[dataSize];<br />  <br />  byte[][] data = this.getFiltratedArray(current);<br />  int tt = 0;<br />  for(int i=0;i&lt;currentBmp.getHight();i++){<br />   <br />   for(int j=0;j&lt;currentBmp.getWeight()*3;j++){<br />    tt+=1;<br />    if((j+1)%3==0){<br />     byte n = (byte) ((((data[i][j-1])&gt;&gt;&gt;5)&amp;0x7)|(data[i][j]&amp;0xF8));<br />     byte m = (byte) (((data[i][j-2]&gt;&gt;&gt;3)&amp;0x1F)|((data[i][j-1]&amp;0x1c)&lt;&lt;3));<br />     int index = tt/3*2;<br />     newData[index-2] = m;<br />     newData[index-1] = n;<br />    }<br />   }<br />  }<br />  for(int i=54;i&lt;newSize;i++){<br />   newByt[i] = newData[i-54];<br />  }<br />  return newByt;<br /> }<br /> <br /> /**<br />  * 过滤bmp补位的数据<br />  * @return<br />  */<br /> private byte[][] getFiltratedArray(byte[] current){<br />  <br />  int residue = (this.currentBmp.getWeight()*3)%4;<br />  int skip = 0;<br />  if(residue!=0) skip = 4-residue;<br />  <br />  byte[][] array = new byte[this.currentBmp.getHight()][this.currentBmp.getWeight()*3];<br />  <br />  int scale = this.currentBmp.getDataOffset();<br />  <br />  for(int i=0;i&lt;this.currentBmp.getHight();i++){<br />//   scale += i*hight;<br />   for(int j=0;j&lt;this.currentBmp.getWeight()*3;j++){<br />    <br />    array[i][j] = current[scale];<br />    scale += 1;<br />   }<br />//   System.out.println("scale="+scale);<br />   scale+=skip;<br />//   System.out.println("scale1="+scale);<br />  }</font>
		</p>
		<p align="left">
				<font size="2">  return array;<br />  <br /> }<br /> <br />}<br /><br />&lt;!----------------------------------------------------<br />public class <strong><font color="#ff3366">Bmp</font></strong> {<br /> <br /> protected final Log logger = LogFactory.getLog(getClass());<br /> <br /> public final static int BITMAPFILEHEADER_SIZE = 14; <br /> <br /> public final static int BITMAPINFOHEADER_SIZE = 40;<br /> /*文件大小*/<br /> private int size;<br /> /*文件宽度*/<br /> private int weight;<br /> /*文件高度*/<br /> private int hight;<br /> /*数据偏移量*/<br /> private int dataOffset;<br /> private byte[] current;<br /> private String filePath;<br /> <br />/*get(),set()方法考虑到节省篇幅,请自行设置*/</font>
		</p>
		<p align="left">
				<font size="2"> public Bmp(){<br />  <br /> }<br /> <br /> /**<br />  * 加载bmp文件<br />  * <br />  * @param filePath<br />  * @return<br />  * @throws IOException<br />  * @throws BusinessException<br />  */<br /> public byte[] loadBmp(String filePath) throws IOException, BusinessException{<br />  <br />  this.filePath = filePath;<br />  this.setParam();<br />  <br />  return current;<br /> }<br /> <br /> /**<br />  * 保存bmp文件<br />  * <br />  * @param desPath<br />  * @throws BusinessException<br />  * @throws IOException<br />  */<br /> public void save(String desPath) throws BusinessException, IOException{<br />  if(current==null){<br />   throw new BusinessException("",null);<br />  }<br />  <br />  FileOutputStream fos = new FileOutputStream(desPath);<br />  fos.write(current,0,current.length);<br />  fos.flush();<br />  fos.close();<br /> }<br /> <br /> private void setParam() throws IOException, BusinessException{<br />  <br />  /*判断源文件是否是bmp格式,后缀可以是.bmp、.dib、.rle*/<br />  if(!filePath.contains(".bmp")){<br />   throw new BusinessException("",null);<br />  }<br />  <br />  FileInputStream  fis = new FileInputStream(filePath);<br />  /*bmp文件头存储*/<br />  byte[] fh = new byte[BITMAPFILEHEADER_SIZE];<br />  fis.read(fh,0,BITMAPFILEHEADER_SIZE);<br />  /*文件头信息存储*/<br />  byte[] hi = new byte[BITMAPINFOHEADER_SIZE];<br />  fis.read(hi,0,BITMAPINFOHEADER_SIZE);<br />  <br />  /*设置文件长度*/<br />  this.size = (((int)fh[5]&amp;0xff)&lt;&lt;24) <br />            | (((int)fh[4]&amp;0xff)&lt;&lt;16)<br />             | (((int)fh[3]&amp;0xff)&lt;&lt;8)<br />              | (int)fh[2]&amp;0xff;<br />  /*设置文件宽度*/<br />  this.weight = (((int)hi[7]&amp;0xff)&lt;&lt;24)<br />            | (((int)hi[6]&amp;0xff)&lt;&lt;16)<br />             | (((int)hi[5]&amp;0xff)&lt;&lt;8)<br />              | (int)hi[4]&amp;0xff;<br />  /*设置文件高度*/<br />  this.hight = (((int)hi[11]&amp;0xff)&lt;&lt;24)<br />      | (((int)hi[10]&amp;0xff)&lt;&lt;16)<br />       | (((int)hi[9]&amp;0xff)&lt;&lt;8)<br />        | (int)hi[8]&amp;0xff;<br />  /*设置位图数据阵列起始偏移量*/<br />  this.dataOffset = (((int)fh[13]&amp;0xff)&lt;&lt;24) <br />             | (((int)fh[12]&amp;0xff)&lt;&lt;16)<br />              | (((int)fh[11]&amp;0xff)&lt;&lt;8)<br />               | (int)fh[10]&amp;0xff;<br /> <br />  fis.close();<br />  loadAll();<br /> }<br /> <br /> private void loadAll() throws IOException{<br />  <br />  FileInputStream  fis = new FileInputStream(filePath);<br />  current = new byte[size];<br />  <br />  fis.read(current,0,size);<br />  <br />  fis.close();<br /> }</font>
				<font size="2">
						<br />}<br />&lt;!----------------------------------<br />public class<strong><font color="#ff3300"> NumberConversion</font></strong> {<br /> <br /> /**<br />  * 整形转化为二进制字节<br />  * <br />  * @param number  需要转化的数字<br />  * @param bytes   字节数<br />  * @return<br />  */<br /> public static byte[] intToBytes(int number,int digit){<br />  <br />  byte[] byts = new byte[digit];<br />//  int mask=0xff;<br />  int basic = 8*(digit-1);<br />  for(int i=0;i&lt;digit;i++){<br />   byts[i] = (byte)(number&gt;&gt;&gt;(basic-i*8));<br />  }<br />  <br />  return byts;<br />  <br /> }<br /> <br /> /**<br />  * <br />  * @param bytes<br />  * @return<br />  */<br /> public static int bytesToInt(byte[] b){<br />  <br />  int mask=0xff;<br />  int temp=0;<br />  int res=0;<br />  <br />  for(int i=0;i&lt;4;i++){<br />         res&lt;&lt;=8;<br />         temp=b[i]&amp;mask;<br />         res|=temp;<br />  }<br />  return res;</font>
		</p>
		<p align="left">
				<font size="2"> }<br />}</font>
		</p>
<img src ="http://www.blogjava.net/zhanglongsr/aggbug/190616.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhanglongsr/" target="_blank">zhangxl</a> 2008-04-03 14:43 <a href="http://www.blogjava.net/zhanglongsr/articles/190616.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Dany Bean 使用</title><link>http://www.blogjava.net/zhanglongsr/articles/75712.html</link><dc:creator>zhangxl</dc:creator><author>zhangxl</author><pubDate>Tue, 17 Oct 2006 10:12:00 GMT</pubDate><guid>http://www.blogjava.net/zhanglongsr/articles/75712.html</guid><wfw:comment>http://www.blogjava.net/zhanglongsr/comments/75712.html</wfw:comment><comments>http://www.blogjava.net/zhanglongsr/articles/75712.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhanglongsr/comments/commentRss/75712.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhanglongsr/services/trackbacks/75712.html</trackback:ping><description><![CDATA[文档编写中<img src ="http://www.blogjava.net/zhanglongsr/aggbug/75712.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhanglongsr/" target="_blank">zhangxl</a> 2006-10-17 18:12 <a href="http://www.blogjava.net/zhanglongsr/articles/75712.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>