资源简介
因为jdk只识别jpg、png、gif这三种格式的在使用java的时候会需要将bmp格式的图片文件转换成jpg、png、gif等格式,使用此代码可将bmp格式转换成jpg格式,能否转换成其他格式的文件还没有测试
代码片段和文件信息
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格式圖片轉換成jpg格式
*/
public class BMPReader{
public String Reader(){
Image image; //构造一个目标图
String result=““; //返回结果
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字节BMP文件头
int bilen=40;
byte bi[]=new byte[bilen];
fs.read(bi0bilen); //读取40字节BMP信息头
// 获取一些重要数据
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);
//位数
int nbitcount=(((int)bi[15]&0xff)<<8) | (int)bi[14]&0xff;
System.out.println(“位数:“+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);
//对24位BMP进行解析
if(nbitcount==24){
int npad=(nsizeimage/nheight)-nwidth*3;
int ndata[]=new int[nheight*nwidth];
byte brgb[]=new byte[(nwidth+npad)*3*nheight];
评论
共有 条评论