亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? imgprocessview.cpp

?? 做成界面的基于小波的spiht算法壓縮解壓縮編碼
?? CPP
字號:
// ImgProcessView.cpp : implementation of the CImgProcessView class
//

#include "stdafx.h"
#include "ImgProcess.h"

#include  "GlobalApi.h"
#include "LEVEL.h"
#include "SPIHTCoder.h"

#include "ImgProcessDoc.h"
#include "ImgProcessView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CImgProcessView

IMPLEMENT_DYNCREATE(CImgProcessView, CScrollView)

BEGIN_MESSAGE_MAP(CImgProcessView, CScrollView)
	//{{AFX_MSG_MAP(CImgProcessView)
	ON_COMMAND(ID_TRANS_DWT, OnTransDwt)
	ON_COMMAND(ID_TRANS_IDWT, OnTransIdwt)
	ON_COMMAND(ID_SPIHT_CODE, OnSpihtCode)
	ON_COMMAND(ID_SPIHT_DECODE, OnSpihtDecode)
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CScrollView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CScrollView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CScrollView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CImgProcessView construction/destruction

CImgProcessView::CImgProcessView()
{
	// TODO: add construction code here
	// 為小波變換設置的參數
	// 臨時存放小波變換系數內存
	m_pDbImage = NULL;	
	
	// 設置當前層數
	m_nDWTCurDepth = 0;

	// 設置小波基緊支集長度
//	m_nSupp = 1;

}

CImgProcessView::~CImgProcessView()
{
	// 釋放已分配內存
	if(m_pDbImage){
		delete[]m_pDbImage;
		m_pDbImage = NULL;
	}
}

BOOL CImgProcessView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CScrollView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CImgProcessView drawing

void CImgProcessView::OnDraw(CDC* pDC)
{
	CImgProcessDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here
	CSize sizeDibDisplay;		
		
	if(!pDoc->m_pDibInit->IsEmpty()){	
		sizeDibDisplay = pDoc->m_pDibInit->GetDimensions();
		pDoc->m_pDibInit->Draw(pDC,CPoint(0,0),sizeDibDisplay);	
	}
}

void CImgProcessView::OnInitialUpdate()
{
	CScrollView::OnInitialUpdate();

	CImgProcessDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);

	CSize sizeTotal = pDoc->m_pDibInit->GetDimensions();
	SetScrollSizes(MM_TEXT, sizeTotal);

	GetParentFrame()->RecalcLayout();
	ResizeParentToFit();
}

/////////////////////////////////////////////////////////////////////////////
// CImgProcessView printing

BOOL CImgProcessView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CImgProcessView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CImgProcessView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// CImgProcessView diagnostics

#ifdef _DEBUG
void CImgProcessView::AssertValid() const
{
	CScrollView::AssertValid();
}

void CImgProcessView::Dump(CDumpContext& dc) const
{
	CScrollView::Dump(dc);
}

CImgProcessDoc* CImgProcessView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CImgProcessDoc)));
	return (CImgProcessDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CImgProcessView message handlers

void CImgProcessView::OnTransDwt() 
{
	// TODO: Add your command handler code here
	// 獲得文檔類指針
	CImgProcessDoc * pDoc = (CImgProcessDoc *)this->GetDocument();

	// 指向圖象的指針
	CDib * pDib = pDoc->m_pDibInit;

	// 更改光標形狀
	BeginWaitCursor();

//*****************************************************
	int* pDbTemp;
	BYTE* pBits;

	CSize m_size;
	// 獲取圖象的存儲尺寸
	CSize sizeImageSave = pDib->GetDibSaveDim();

	m_size.cx = pDib->m_lpBMIH->biWidth;
	m_size.cy = pDib->m_lpBMIH->biHeight;
	iwidth=m_size.cx ;
	iheight=m_size.cy;
	
	frame=new int[m_size.cx * m_size.cy];
	
	// 將圖象數據放入frame中 
		for (int j=0; j<iheight; j++)
		{
			pDbTemp = frame + j*sizeImageSave.cx;
			pBits = pDib->m_lpImage + (iheight-1-j)*sizeImageSave.cx;		
			for (int i=0; i<iwidth; i++)
				pDbTemp[i] = pBits[i];
		}

//**********************************************
    //產生對話框
	CLEVEL Dialog;
    Dialog.m_level = 1;
	Dialog.m_supp = 1;
	if (Dialog.DoModal()!=IDOK)
    return;
	// 設置需要分解的層數
	m_nDWTLevel = Dialog.m_level;
	// 設置小波基緊支集長度
	m_nSupp = Dialog.m_supp;
	
	//刪除對話框
	delete Dialog;
//*********************************************

	// 進行小波變換
	int rsl;
	for(int i=0;i<m_nDWTLevel;i++)
	 rsl = DIBDWTStep(pDib,0);

	// 恢復光標形狀
	EndWaitCursor();

	// 如果小波變換不成功,則直接返回
	if (!rsl)			
		return;

	// 設置臟標志
	pDoc->SetModifiedFlag(TRUE);

	// 更新顯示
	pDoc->UpdateAllViews(NULL);

}

void CImgProcessView::OnTransIdwt() 
{
	// TODO: Add your command handler code here
	// 獲得文檔類指針	
	CImgProcessDoc * pDoc = (CImgProcessDoc *)this->GetDocument();

	// 指向圖象的指針
	CDib * pDib = pDoc->m_pDibInit;

	// 更改光標形狀
	BeginWaitCursor();

//**************************************

	try{
		if(m_nDWTCurDepth<1) 
			throw new CException;}
		//錯誤處理
	catch(CException* pe)
	{
		AfxMessageBox("當前已不能反變換");
		pe->Delete();
		return;
	}

//************************************

	// 進行小波反變換
	int rsl;
	for(int i=m_nDWTLevel;i>0;i--)
	 rsl = DIBDWTStep(pDib,1);
	//int rsl = DIBDWTStep(pDib,1);
//*****************************
	// 獲取圖象的存儲尺寸
	CSize sizeImageSave = pDib->GetDibSaveDim();
	int* image;
	int* pDbTemp;
	BYTE* pBits;
		image=new int[iheight * iwidth];
	
	// 將圖象數據放入frame中 
		for (int j=0; j<iheight; j++)
		{
			pDbTemp = image + j*sizeImageSave.cx;
			pBits = pDib->m_lpImage + (iheight-1-j)*sizeImageSave.cx;		
			for (int i=0; i<iwidth; i++)
				pDbTemp[i] = pBits[i];
		}
//計算PSNR
	int m,n,MSE;
	float PSNR;
	CString str;
	   MSE=0;
	   for(m=0;m<iheight;m++)
	      for(n=0;n<iwidth;n++)
		      MSE=MSE+(image[m*iwidth+n]-frame[m*iwidth+n])*(image[m*iwidth+n]-frame[m*iwidth+n]);
		      MSE=MSE/(iwidth*iheight);
		      PSNR=10*log10(255*255/MSE);  
			  str.Format("PSNR為%f",PSNR);
	          //AfxMessageBox(str);

	delete []image;
	delete []frame;

	// 恢復光標形狀
	EndWaitCursor();
	// 如果小波變換不成功,則直接返回
	if (!rsl)			
		return;
	pDoc->UpdateAllViews(FALSE);

	// 設置臟標記
	pDoc->SetModifiedFlag(TRUE);
	
	// 更新視圖
	pDoc->UpdateAllViews(NULL);
	AfxMessageBox(str);
}

BOOL CImgProcessView::DIBDWTStep(CDib* pDib,int nInv)
{
	// 循環變量
	int i, j;

	// 獲取圖象的長度和寬度
	int nWidth  = pDib->m_lpBMIH->biWidth;
	int nHeight = pDib->m_lpBMIH->biHeight;
		
	// 獲取變換的最大層數
	int nMaxWLevel = Log2(nWidth);
	int nMaxHLevel = Log2(nHeight);
	int nMaxLevel;
	if (nWidth == 1<<nMaxWLevel && nHeight == 1<<nMaxHLevel)
		nMaxLevel = min(nMaxWLevel, nMaxHLevel);

	// 獲取圖象的存儲尺寸
	CSize sizeImageSave = pDib->GetDibSaveDim();

	// 臨時變量
	double	*pDbTemp;
	BYTE	*pBits;

	// 如果小波變換的存儲內存還沒有分配,則分配此內存
	if(!m_pDbImage){			
		m_pDbImage = new double[nWidth*nHeight];
		if (!m_pDbImage)	return FALSE;

		// 將圖象數據放入m_pDbImage中 
		for (j=0; j<nHeight; j++)
		{
			pDbTemp = m_pDbImage + j*sizeImageSave.cx;
			pBits = pDib->m_lpImage + (nHeight-1-j)*sizeImageSave.cx;		
			for (i=0; i<nWidth; i++)
				pDbTemp[i] = pBits[i];
		}
	}
	
	// 進行小波變換(或反變換)
	if (!DWTStep_2D(m_pDbImage, nMaxWLevel-m_nDWTCurDepth, nMaxHLevel-m_nDWTCurDepth,
						nMaxWLevel, nMaxHLevel, nInv, 1, m_nSupp))
		return FALSE;

	// 如果是反變換,則當前層數減1
	if (nInv)
		m_nDWTCurDepth --;
	// 否則加1
	else
		m_nDWTCurDepth ++;

	// 然后,將數據拷貝回原CDib中,并進行相應的數據轉換
	int lfw = nWidth>>m_nDWTCurDepth, lfh = nHeight>>m_nDWTCurDepth;
	for (j=0; j<nHeight; j++)
	{
		pDbTemp = m_pDbImage + j*sizeImageSave.cx;
		pBits = pDib->m_lpImage + (nHeight-1-j)*sizeImageSave.cx;
		for (i=0; i<nWidth; i++)
		{
			if (j<lfh && i<lfw)
				pBits[i] = FloatToByte(pDbTemp[i]);
			else
				pBits[i] = BYTE(FloatToChar(pDbTemp[i]) ^ 0x80);			
		}
	}

	// 返回
	return TRUE;
}

void CImgProcessView::OnSpihtCode() 
{
	// TODO: Add your command handler code here
	// 獲得文檔類指針	
	CImgProcessDoc * pDoc = (CImgProcessDoc *)this->GetDocument();

	// 指向圖象的指針
	CDib * pDib = pDoc->m_pDibInit;

	int nWidth  = pDib->m_lpBMIH->biWidth;
	int nHeight = pDib->m_lpBMIH->biHeight;

	int i,j,*data;
	float bytecounts2;
	data=new int[nHeight*nWidth];
   	CSPIHTCoder SPIHTCoder;

	for (j=0; j<nHeight; j++)
		for (i=0; i<nWidth; i++)
			data[j*nHeight+i] = (int)m_pDbImage[j*nHeight+i];
	
	
    //開始計時
//	start = clock();
	 
	/*5/3提升小波變換*/
 //  IntDwt53.Dwt2D(data1, iheight,iwidth,level);
//	SPTransform.Dwt2D(data1, nHeight,nWidth,level);

	//計時開始
	start = clock();	
	/*spiht編碼*/
    SPIHTCoder.Losslessencode(data,nWidth,nHeight); 
	threshold2=SPIHTCoder.threshold;
    bytecounts2=SPIHTCoder.counts;

	//計時結束
	finish = clock();

	double  duration1;
	//計算編碼時間
    duration1 = (double)(finish - start)/CLOCKS_PER_SEC;

	float CR1;
	/*計算壓縮比*/
	CR1=float((nWidth*nHeight)/bytecounts2);
 		 
    //清除內存
 	delete []data;

	
	CString str1,str2;
	str1.Format("%f",duration1);
	str2.Format("%f",CR1);

    AfxMessageBox("編碼時間:"+str1+"s"+"\n壓縮比:"+str2);
    
}

void CImgProcessView::OnSpihtDecode() 
{
	// TODO: Add your command handler code here
	CImgProcessDoc * pDoc = (CImgProcessDoc *)this->GetDocument();

	// 指向圖象的指針
	CDib * pDib = pDoc->m_pDibInit;

	int nWidth  = pDib->m_lpBMIH->biWidth;
	int nHeight = pDib->m_lpBMIH->biHeight;

	int i,j,*data;
	
	data=new int[nHeight*nWidth];
   	CSPIHTCoder SPIHTCoder;
//	CString str;
//	lpDst1=lpSrc;
	      
	//計時開始
	start = clock();
    /*spiht解碼*/
    SPIHTCoder.Losslessdecoder(nWidth,nHeight,threshold2);  
	//計時結束
	finish = clock();

	double  duration1;
	//計算編碼時間
    duration1 = (double)(finish - start)/CLOCKS_PER_SEC;
	   

	/*獲取spiht解碼后的數據*/
	for(i=0;i<nHeight;i++)
	  for(j=0;j<nWidth;j++)
	      data[i*nWidth+j]=SPIHTCoder.MR->m[i][j];

    /*5/3提升小波反變換*/
  //  IntDwt53.IDwt2D(data1, iheight,iwidth,level);
   //   SPTransform.IDwt2D(data, iheight,iwidth,level);
	  FILE *fp;
	 fp = fopen("lenai1dwt.txt","w");
	 for(i=0;i<nHeight;i++)
	   for(j=0;j<nWidth;j++)
		   fprintf(fp,"%d ",data[i*nWidth+j]);
	   fclose(fp);

	 //解碼后數據賦值給m_pDbImage
	 for (i=0; i<nWidth; i++) 
	{
		for (j=0; j<nHeight; j++) 
		 {
			m_pDbImage[i*nWidth+j] = (double)data[i*nWidth+j];
		 }	
	}

    /*清除內存*/
 	delete []data;

	CString str1;
	str1.Format("%f",duration1);
	
    AfxMessageBox("解碼時間:"+str1+"s");
	
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩一区二区三区四区| 香蕉久久一区二区不卡无毒影院 | 奇米一区二区三区av| 日本一区二区三级电影在线观看| 欧美日韩亚洲综合在线| 国产精品综合一区二区| 男男视频亚洲欧美| 午夜欧美2019年伦理| 一区二区三区.www| 亚洲另类春色校园小说| 欧美成人女星排行榜| 日韩精品一二三区| 亚洲在线中文字幕| 337p粉嫩大胆色噜噜噜噜亚洲| 不卡视频在线看| 成人av在线一区二区三区| 韩国av一区二区三区四区| 久久激情五月婷婷| 久久成人羞羞网站| 国模一区二区三区白浆| 激情五月婷婷综合| 国产传媒一区在线| 成人午夜av影视| 不卡的av电影在线观看| av一区二区三区黑人| 97久久精品人人澡人人爽| 国产成人精品亚洲777人妖| 蜜臀av一区二区| 捆绑调教美女网站视频一区| 韩国av一区二区三区在线观看| 国产一区二区美女诱惑| 不卡av在线网| 在线看不卡av| 欧美一级片在线| 久久精子c满五个校花| 亚洲欧美综合在线精品| 亚洲国产成人91porn| 欧美bbbbb| 国产精品一二三四区| 大美女一区二区三区| 色综合咪咪久久| 欧美日韩精品欧美日韩精品一综合| 欧美在线999| 日韩欧美成人一区二区| 日本一区二区成人| 亚洲国产成人va在线观看天堂| 久久国产精品无码网站| 成av人片一区二区| 日韩一区二区视频在线观看| 国产精品毛片无遮挡高清| 亚洲一二三区视频在线观看| 蜜臀av一级做a爰片久久| 激情伊人五月天久久综合| 蜜臀va亚洲va欧美va天堂| 国产精品欧美一区二区三区| 一区二区免费视频| 国产成人高清在线| 欧美日韩国产高清一区二区| 久久网站最新地址| 亚洲欧洲日韩在线| 韩国毛片一区二区三区| 欧美性一级生活| 中文在线一区二区| 日韩电影在线观看网站| 国产a精品视频| 日韩欧美国产午夜精品| 亚洲精品国产一区二区精华液| 久久se精品一区精品二区| 色悠悠久久综合| 国产偷v国产偷v亚洲高清| 天堂在线一区二区| 一本到三区不卡视频| 日韩美女视频一区二区在线观看| 亚洲综合另类小说| 99久久精品费精品国产一区二区| 日韩视频在线一区二区| 亚洲成人资源网| 91麻豆文化传媒在线观看| 国产日产欧美一区二区三区| 免费的国产精品| 欧美写真视频网站| 一区二区在线观看视频| 成人黄色大片在线观看| 国产调教视频一区| 国产乱淫av一区二区三区 | 久久亚洲影视婷婷| 日韩激情视频网站| 欧美日韩在线播放三区四区| 亚洲女厕所小便bbb| 成人av在线看| 亚洲欧美成aⅴ人在线观看| 99久久777色| 国产精品理论片在线观看| 成人免费视频视频在线观看免费| 日本韩国欧美一区二区三区| 亚洲三级电影网站| 九九在线精品视频| 欧美二区乱c少妇| 一区二区三区中文免费| 91欧美一区二区| 一区二区在线看| 欧洲国内综合视频| 亚洲成av人片在线| 欧美精品三级在线观看| 人禽交欧美网站| 亚洲精品在线三区| 成人天堂资源www在线| 中文字幕中文字幕在线一区 | 91国产免费观看| 亚洲伊人色欲综合网| 欧美精品乱人伦久久久久久| 青青草原综合久久大伊人精品优势| 日韩欧美在线1卡| 三级不卡在线观看| 欧美人xxxx| 国产综合色在线| 国产精品久久毛片| 欧美日韩一区三区四区| 日韩av高清在线观看| 精品久久久三级丝袜| av中文一区二区三区| 天天av天天翘天天综合网| 一本到一区二区三区| 久久精品国产77777蜜臀| 国产亚洲成av人在线观看导航| 国产高清久久久久| 亚洲国产一区二区三区| 亚洲精品一区二区三区影院| 色综合久久综合| 精品综合久久久久久8888| 国产精品国产馆在线真实露脸| 欧美日韩中文字幕一区二区| 国产99久久精品| 视频一区二区三区入口| 国产精品欧美久久久久无广告| 欧美中文字幕一二三区视频| 国产精品小仙女| 天堂精品中文字幕在线| 国产精品乱人伦中文| 日韩一区二区三区免费看| 波多野结衣欧美| 秋霞电影网一区二区| 亚洲猫色日本管| 欧美高清在线一区| 欧美tk丨vk视频| 欧美丝袜丝nylons| www.欧美.com| 国产黄人亚洲片| 国产在线一区观看| 免费观看久久久4p| 亚洲成人av中文| 亚洲免费av在线| 欧美成人一区二区三区| 欧美性极品少妇| 国产电影一区二区三区| 亚洲一级二级三级在线免费观看| 欧美激情在线一区二区三区| 久久久久久亚洲综合影院红桃| 欧美日本一道本| 欧美日韩五月天| 在线观看欧美黄色| 97se亚洲国产综合自在线观| 成人av电影在线网| 国产一区二区在线观看视频| 免费成人美女在线观看.| 五月天久久比比资源色| 亚洲国产精品久久不卡毛片| 一区二区三区国产精品| 亚洲欧美日本韩国| 一区二区三区电影在线播| 亚洲日本青草视频在线怡红院| 国产精品乱码人人做人人爱| 国产女人18毛片水真多成人如厕 | 日本成人中文字幕| 日韩av在线发布| 国内一区二区视频| 国产盗摄一区二区| 成人免费av资源| 99精品在线免费| 欧美电影一区二区| 精品福利视频一区二区三区| 精品国产一区二区精华| 国产欧美一区在线| 亚洲欧美日韩一区二区三区在线观看| 亚洲18色成人| 粉嫩欧美一区二区三区高清影视| 91黄色免费观看| 久久久久国产一区二区三区四区| 亚洲欧美日韩中文播放| 韩国女主播成人在线| 在线免费观看不卡av| 国产精品国产三级国产普通话三级| 午夜精品爽啪视频| 99热精品国产| 日韩欧美国产一区二区三区| 一区二区三区免费在线观看| 国产成人丝袜美腿| 欧美精品在线一区二区三区| 国产精品国产自产拍在线| 免费精品99久久国产综合精品|