⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 source_code.txt

📁 是一种采用哈夫曼算法的图像压缩算法
💻 TXT
字号:
/* float *fTemp;//保存中间结果
  int *iMap;   //保存映射关系

  fTemp=new float[m_iColorNum];
  iMap=new int[m_iColorNum];
  m_strCode=new CString[m_iColorNum];

  for(i=0;i<m_iColorNum;i++) //初始化
  { fTemp[i]=m_fFreq[i];
    iMap[i]=i;
  }

  //用冒泡法对灰度值出现的概率进行排序
  for(j=0;j<m_iColorNum;j++) 
  { for(i=0;i<m_iColorNum-j-1;i++)
	  if(fTemp[i]>fTemp[i+1])
		{ fT=fTemp[i];
          fTemp[i]=fTemp[i+1];
		  fTemp[i+1]=fT;
		  
		  for(k=0;k<m_iColorNum;k++)//更换映射关系
		  { if(iMap[k]==i)
			  iMap[k]=i+1;
		    else if(iMap[k]==i+1)
			       iMap[k]=i;
		  }
		}
	
  }

//////////////////////////////////////////////
//以下进行灰度值的哈夫曼编码

//找到概率大于0的灰度值开始编码
  for(i=0;i<m_iColorNum-1;i++)
  { if(fTemp[i]>0)
	 break;
  }

  for(;i<m_iColorNum-1;i++)
  { for(k=0;k<m_iColorNum;k++)
	{ if(iMap[k]==i)
		 m_strCode[k]="1"+m_strCode[k];
      else if(iMap[k]==i+1)
		      m_strCode[k]="0"+m_strCode[k];
	}
  
    fTemp[i+1]+=fTemp[i];

    for(k=0;k<m_iColorNum;k++)
	{ if(iMap[k]==i)
	    iMap[i]=i+1;
	}
  
    //重新排序
    for(j=i+1;j<m_iColorNum-1;j++)
	{  if(fTemp[j]>fTemp[j+1])
		 { fT=fTemp[j];
           fTemp[j]=fTemp[j+1];
		   fTemp[j+1]=fT;
		  
		   for(k=0;k<m_iColorNum;k++)
		   { if(iMap[k]==j)
		      iMap[k]=j+1;
		     else if(iMap[k]==j+1)
		    		iMap[k]=j;
		   }
		}
     else
	    break;
	}
  }*/


  /* for(i=1;i<=m_iColorNum;i++)
      m_dAvgCodeLen+=m_fFreq[i].freq *m_strCode[i-1].GetLength();
  
   m_dEfficiency=m_dEntropy/m_dAvgCodeLen;
   UpdateData(FALSE); //保存变动

///////////////////////////////////////////////////////
//输出编码结果

   //设置List控件样式
   m_lstTable.ModifyStyle(LVS_TYPEMASK,LVS_REPORT);

   //给List控件添加Header
   m_lstTable.InsertColumn(0,"灰度值",LVCFMT_LEFT,60,0);
   m_lstTable.InsertColumn(1,"出现频率",LVCFMT_LEFT,78,0);
   m_lstTable.InsertColumn(2,"哈夫曼编码",LVCFMT_LEFT,110,1);
   m_lstTable.InsertColumn(3,"码字长度",LVCFMT_LEFT,78,2);
   
   //设置样式为文本
   lvitem.mask=LVIF_TEXT;

   //计算平均码字长度
   for(i=0;i<m_iColorNum;i++)
   { //添加一项
	 lvitem.iItem=m_lstTable.GetItemCount( );
	 str.Format("%u",m_fFreq[i+1].GrayValue );
	 lvitem.iSubItem=0;
	 lvitem.pszText=(LPSTR)(LPCTSTR)str;
	 iActualItem=m_lstTable.InsertItem(&lvitem);

	 //添加其他列
	 lvitem.iItem=iActualItem;

	 //添加灰度值出现的概率
	 lvitem.iSubItem=1;
	 str.Format("%f",m_fFreq[i+1].freq );
	 lvitem.pszText=(LPTSTR)(LPCTSTR)str;
	 m_lstTable.SetItem(&lvitem);

	 //添加哈夫曼编码
	 lvitem.iSubItem=2;
	 lvitem.pszText=(LPTSTR)(LPCTSTR)m_strCode[i];
	 m_lstTable.SetItem (&lvitem);

	 //添加码字长度
	 lvitem.iSubItem=3;
	 str.Format("%u",m_strCode[i].GetLength ());
	 lvitem.pszText=(LPTSTR)(LPCTSTR)str;
	 m_lstTable.SetItem(&lvitem);
   }*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -