📄 huffmancode.java
字号:
//HuffmanCode.java
/*
程序说明:对图像进行复原。
程序修改:
最后修改时间:2008-11
作者:朱磊
*/
import java.awt.Image;
import java.awt.image.PixelGrabber;
import javax.swing.JOptionPane;
public class HuffmanCode{
Image im;
Image tmp;
int iw;
int ih;
int[] pixels;
boolean flagLoad;
//构造方法
public HuffmanCode(Image im,boolean flagLoad){
if(im==null)
{
JOptionPane.showMessageDialog(null,"请先打开一幅图片!",
"Alert",JOptionPane.WARNING_MESSAGE);
}
this.im = im;
this.iw = im.getWidth(null);
this.ih = im.getHeight(null);
pixels=new int [iw*ih];
// this.pixels=pixels;
this.flagLoad = flagLoad;
try {
PixelGrabber pg = new PixelGrabber(im, 0, 0, iw, ih, pixels, 0, iw);
pg.grabPixels();
} catch (InterruptedException e3) {
e3.printStackTrace();
}
}
public void jHuffmanCode_ActionPerformed(){
if(flagLoad){
try{
PixelGrabber pg=new PixelGrabber(im,0,0,iw,ih,pixels,0,iw);
pg.grabPixels();
}catch (InterruptedException e3) {
e3.printStackTrace();
}
//保存图像的灰度
int grey[]=new int [iw*ih];
//获得图像的灰度值
for(int i=0;i<iw*ih;i++)
{
grey[i]=pixels[i]&0xff;
}
//对图像进行Huffman编码
Huffman huffman=new Huffman(grey,iw,ih);
System.out.println("iw:"+iw+"ih:"+ih);
//h.test();
huffman.huff();
//图像熵
float entropy;
//平均码子长度
float avgCode;
//编码效率
float efficiency;
//出现频率
float freq[]=new float[256];
//Huffman编码
String sCode[] =new String[256];
entropy=huffman.getEntropy();
avgCode=huffman.getAvgCode();
efficiency=huffman.getEfficiency();
//出现频率
freq=huffman.getFreq();
//Huffman编码
sCode=huffman.getCode();
//调用HuffmanShow.java进行显示
HuffmanShow hs=new HuffmanShow(entropy,avgCode,efficiency);
hs.setData(freq,sCode);
hs.showTable();
hs.setVisible(true);
// repaint();
}else{
JOptionPane.showMessageDialog(null,"请先打开一幅图片!",
"Alert",JOptionPane.WARNING_MESSAGE);
}
}
//定义main方法,设置窗口的大小,显示窗口
// public static void main(String[] args) {
// HuffmanCode hc = new HuffmanCode();
// jHuffmanCode_ActionPerformed(im,iw,ih,pixels,flag);
// }
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -