-
大小: 5KB文件類型: .java金幣: 1下載: 0 次發(fā)布日期: 2021-06-14
- 語(yǔ)言: Java
- 標(biāo)簽:
資源簡(jiǎn)介
因?yàn)閖dk只識(shí)別jpg、png、gif這三種格式的在使用java的時(shí)候會(huì)需要將bmp格式的圖片文件轉(zhuǎn)換成jpg、png、gif等格式,使用此代碼可將bmp格式轉(zhuǎn)換成jpg格式,能否轉(zhuǎn)換成其他格式的文件還沒(méi)有測(cè)試
代碼片段和文件信息
import?java.awt.Image;
import?java.awt.Toolkit;
import?java.awt.image.BufferedImage;
import?java.awt.image.MemoryImageSource;
import?java.io.File;
import?java.io.FileInputStream;
import?java.io.FileNotFoundException;
import?java.io.FileOutputStream;
import?java.io.IOException;
import?java.util.HashMap;
import?java.util.Map;
import?javax.imageio.ImageIO;
import?com.sun.image.codec.jpeg.JPEGCodec;
import?com.sun.image.codec.jpeg.JPEGImageEncoder;
/**
?*?
?*?@author?RJL
?*?date?2013-02
?*?將bmp格式圖片轉(zhuǎn)換成jpg格式
?*/
public?class?BMPReader{
????public?String?Reader(){??
????????Image?image;????????????????????????????????????//構(gòu)造一個(gè)目標(biāo)圖
????????String?result=““;???????????????????????????????//返回結(jié)果
?try{
?????FileInputStream?fs=new?FileInputStream(new?File(“IDRCallDll“).getAbsolutePath().substring(0new?File(“IDRCallDll“).getAbsolutePath().lastIndexOf(“\\“))+“\\photo.bmp“);
?????int?bflen=14;????????????????????????????
?????byte?bf[]=new?byte[bflen];?????????????
?????fs.read(bf0bflen);??????????????????????? //讀取14字節(jié)BMP文件頭
?????int?bilen=40;??????????????????
?????byte?bi[]=new?byte[bilen];
?????fs.read(bi0bilen);?????????????????????? //讀取40字節(jié)BMP信息頭
?????//?獲取一些重要數(shù)據(jù)
?????int?nwidth=(((int)bi[7]&0xff)<<24)????????? //源圖寬度
?????|?(((int)bi[6]&0xff)<<16)
?????|?(((int)bi[5]&0xff)<<8)
?????|?(int)bi[4]&0xff;
?????System.out.println(“寬:“+nwidth);
????????????int?nheight=(((int)bi[11]&0xff)<<24)??????? //源圖高度
?????|?(((int)bi[10]&0xff)<<16)
?????|?(((int)bi[9]&0xff)<<8)
?????|?(int)bi[8]&0xff;
?????System.out.println(“高:“+nheight);
???????????? //位數(shù)
?????int?nbitcount=(((int)bi[15]&0xff)<<8)?|?(int)bi[14]&0xff;
?????System.out.println(“位數(shù):“+nbitcount);
???????????? //源圖大小
?????int?nsizeimage=Integer.parseInt(getImgInfo(new?File(“IDRCallDll“).getAbsolutePath().substring(0new?File(“IDRCallDll“).getAbsolutePath().lastIndexOf(“\\“))+“\\photo.bmp“));
//?????(((int)bi[23]&0xff)<<24)
//?????|?(((int)bi[22]&0xff)<<16)
//?????|?(((int)bi[21]&0xff)<<8)
//?????|?(int)bi[20]&0xff;
?????System.out.println(((int)bi[23]&0xff)<<24);
?????System.out.println(((int)bi[22]&0xff)<<16);
?????System.out.println((int)bi[21]&0xff<<8);
?????System.out.println((int)bi[20]&0xff);
?????System.out.println(“源圖大小:“+nsizeimage);
???????????? //對(duì)24位BMP進(jìn)行解析
?????if(nbitcount==24){
?????????int?npad=(nsizeimage/nheight)-nwidth*3;
?????????int?ndata[]=new?int[nheight*nwidth];
?????????byte?brgb[]=new?byte[(nwidth+npad)*3*nheight];
????????
評(píng)論
共有 條評(píng)論