📄 equilize.java
字号:
/**
*说明:直方图均衡化
*日期:04.10.13
*作者:李向彬
*版本:v1.0
*/
import java.io.*;
import bmpinfo.Bmp_Information;
public class Equilize
{
static long pos=54;
RandomAccessFile Rfile=null;
Bmp_Information pro;
File temp=null;
File tempfile=null;
int[] newlevel=new int[256];
public Equilize(String filename)
{
try{
File file=File.createTempFile("temp",".bmp");
temp=file;
file.deleteOnExit();
tempfile=newFile(new File(filename),file);
}catch(IOException e){System.out.println("复制文件出错:"+e);}
pro=new Bmp_Information(filename);
try{
Rfile=new RandomAccessFile(tempfile,"rws");
}catch(FileNotFoundException e){
System.out.println("文件没有找到。");
}
}
public void equipoise()
{
int []graylevel=pro.getGraylevel();
int []palette=new int[1024];
try{
Rfile.seek(pos);
for(int m=0;m<1024;m++)
{
palette[m]=Rfile.readUnsignedByte();
}
for(int i=0;i<256;i++)
{
newlevel[i]=mincount(graylevel,i)*255/maxcount(graylevel);
}
for(int j=0;j<1024;j++)
{
if((j+1)%4==0){continue;}
else{
int level=newlevel[palette[j]];
palette[j]=level;
}
}
Rfile.seek(pos);
for(int n=0;n<1024;n++)
{
Rfile.writeByte(palette[n]);
}
}catch(IOException e)
{
System.out.println("读写文件出错:"+e);
}finally{
try{
Rfile.close();
}catch(IOException ee){}
}
}
public static int mincount(int[] array,int index)
{
int count=0;
for(int i=0;i<=index;i++)
{
count+=array[i];
}
return count;
}
public static int maxcount(int[] array)
{
int count=0;
for(int i=0;i<array.length;i++)
{
count+=array[i];
}
return count;
}
public static File newFile(File source,File aim)
{
BufferedInputStream bfs=null;
BufferedOutputStream bos=null;
int size=(int)source.length();
byte[] date=new byte[size];
try{
bfs=new BufferedInputStream(new FileInputStream(source));
int datasize=bfs.read(date,0,size);
bos=new BufferedOutputStream(new FileOutputStream(aim));
bos.write(date,0,size);
}catch(Exception e){
System.out.println(e);
}finally{
try{
bfs.close();
bos.close();
}catch(IOException e){}
}
return aim;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -