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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? bmpcompressdlg.cpp

?? bmp圖像的離散余弦變換壓縮 是一種有損的壓縮
?? CPP
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):

	str="文件大小->";
	::itoa(m_bfsize,strChar1,10);
	strcpy(strChar,str);
	strcat(strChar,strChar1);
	strcat(strChar,"bit");
	pDC->TextOut(left+5,top+25,strChar);
	if(strTitle=="位圖文件名稱->")
	{
	str="顏色位數(shù)->";
	::itoa(m_numberofcolor,strChar1,10);
	strcpy(strChar,str);
	strcat(strChar,strChar1);
	pDC->TextOut(left+5,top+45,strChar);
	}
	if(strTitle=="被壓縮后文件名稱->")
	{
	str="壓縮比->";
	strcpy(strChar,str);
    strcat(strChar,m_compressionRatio);
	pDC->TextOut(left+5,top+45,strChar);
	}
}

void CBmpCompressDlg::OnOutofmemoryScaleDisplayBMP(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here

	*pResult = 0;
}

void CBmpCompressDlg::OnUpdateClient(int nIDDlgItem)
{
	
}


void CBmpCompressDlg::OnReleasedcaptureScale(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	CWnd *pBtn=GetDlgItem(IDDDISPLAY);
	CString str;
	pBtn->GetWindowText(str);
	if((m_Dib.GetData()!=NULL)&&(str!="Display"))
	{
		m_ratio=((float)m_scale.GetPos())/100;
		OnDrawBMP();
		*pResult = 0;
	}
	else
	{
		MessageBox("沒有顯示圖像!", "系統(tǒng)提示" , 
			MB_ICONINFORMATION | MB_OK);
		m_scale.SetPos(0);
	}
}

BOOL CBmpCompressDlg::CompressBMP(CFile & dibfile)
{

	int bH=m_Dib.GetHeight();//the height of BMP
	int bW=m_Dib.GetWidth();//the width of BMP
	DWORD dwSizeUsedRow=0;//行掃描有用字節(jié)數(shù)
	DWORD dwSizeUsedCol=0;//列掃描有用字節(jié)數(shù)
	DWORD i=0;
	BYTE *pBitmapData=m_Dib.GetData();
	LPBYTE bufferIn;
	LPBYTE bufferOutRow;
	LPBYTE bufferOutCol;
	DWORD realSize;
	realSize=m_Dib.GetSize();
	bufferIn=new BYTE[realSize];
	bufferIn=pBitmapData;
	bufferOutRow=new BYTE[realSize];
	bufferOutCol=new BYTE[realSize];
	//寫入DAT文件頭結(jié)構(gòu)
	DATHEADER datHdr;
	datHdr.bManufacturer= 0x0A;
	datHdr.bVersion=5;
	datHdr.wHeight=m_Dib.GetHeight();
	datHdr.wWidth=m_Dib.GetWidth();
	datHdr.numberOfColor=m_numberofcolor;
	datHdr.biSizeImage=m_Dib.GetSize();
	//壓縮編碼開始
	//選取標(biāo)志位
	int id[255];
	memset(id,0,256);//初始化數(shù)組
	for(i=0;i<realSize;i++)
		id[(int)bufferIn[i]]++;
	int idOfMinCount=id[0];
	BYTE identify;//標(biāo)志位
	for(i=0;i<256;i++)
	{	if(id[i]<idOfMinCount)
		{
			idOfMinCount=id[i];
			identify=(BYTE)i;
			if(idOfMinCount==0)
				break;
		}
	}
	datHdr.identify=identify;
	//按行壓縮:
	BYTE CH=bufferIn[0];
	if(CH==identify)
	{
		if((int)identify!=0)
			CH=BYTE((int)identify-1);//如果圖像中存在標(biāo)志位的實(shí)際像素將該像素值減一
		else 
			CH=BYTE((int)identify+1);
	}
	BYTE SC;
	int iCount=1;//重復(fù)字符個(gè)數(shù)
	for(i=1;i<realSize;i++)
	{
		SC=bufferIn[i];
		if(SC==identify)
		{
			if((int)identify!=0)
				CH=BYTE((int)identify-1);//如果圖像中存在標(biāo)志位的實(shí)際像素將該像素值減一
			else 
				CH=BYTE((int)identify+1);
		}
		if((SC==CH)&&(iCount<255))
			iCount++;
		else if(iCount<4)
		{
			memset(&bufferOutRow[dwSizeUsedRow],CH,iCount);
			dwSizeUsedRow+=iCount;
			iCount=1;
			CH=SC;
		}
		else
		{
			bufferOutRow[dwSizeUsedRow]=identify;
			bufferOutRow[dwSizeUsedRow+1]=iCount;
			bufferOutRow[dwSizeUsedRow+2]=CH;
			CH=SC;
			dwSizeUsedRow+=3;
			iCount=1;
			 
		}
	}
	//--保存最后一部分編碼
	if(iCount<4)
	{
			memset(&bufferOutRow[dwSizeUsedRow],CH,iCount);
			dwSizeUsedRow+=iCount;
			CH=SC;
	}
	else
	{
		bufferOutRow[dwSizeUsedRow]=identify;
		bufferOutRow[dwSizeUsedRow+1]=iCount;
		bufferOutRow[dwSizeUsedRow+2]=CH;
		CH=SC;
		dwSizeUsedRow+=3;
	}
	
	//按列壓縮:
	BYTE **bufferInCol;
	bufferInCol=new  BYTE *[bH];
	for(int index=0;index<bH;index++)
		bufferInCol[index]=new BYTE[bW];
	int row;
	int col;
	for(row=0;row<bH;row++)
		for( col=0;col<bW;col++)
			bufferInCol[row][col]=*bufferIn++;//將像素?cái)?shù)據(jù)存于二維數(shù)組中

	CH=bufferInCol[0][0];
	if(CH==identify)
	{
		if((int)identify!=0)
			CH=BYTE((int)identify-1);//如果圖像中存在標(biāo)志位的實(shí)際像素將該像素值減一
		else 
			CH=BYTE((int)identify+1);
	}
	
	iCount=1;//重復(fù)字符個(gè)數(shù)
	for( col=0;col<bW;col++)
		for( row=0;row<bH;row++)
		{
			SC=bufferInCol[row][col];
			if(SC==identify)
			{
				if((int)identify!=0)
					CH=BYTE((int)identify-1);//如果圖像中存在標(biāo)志位的實(shí)際像素將該像素值減一
				else 
					CH=BYTE((int)identify+1);
			}
			if((SC==CH)&&(iCount<255))
				iCount++;
			else if(iCount<4)
			{
				memset(&bufferOutCol[dwSizeUsedCol],CH,iCount);
				dwSizeUsedCol+=iCount;
				iCount=1;
				CH=SC;
			}
			else
			{
				bufferOutCol[dwSizeUsedCol]=identify;
				bufferOutCol[dwSizeUsedCol+1]=iCount;
				bufferOutCol[dwSizeUsedCol+2]=CH;
				CH=SC;
				dwSizeUsedCol+=3;
				iCount=1;
			}
		}
	//----保存最后一部分編碼
	if(iCount<4)
		{
			memset(&bufferOutCol[dwSizeUsedCol],CH,iCount);
			dwSizeUsedCol+=iCount;
			
		}
	else
		{
			bufferOutCol[dwSizeUsedCol]=identify;
			bufferOutCol[dwSizeUsedCol+1]=iCount;
			bufferOutCol[dwSizeUsedCol+2]=CH;
			dwSizeUsedCol+=3;
		}
	//計(jì)算壓縮比,并比較三種掃描方法的壓縮比大小取其中最小的。
	
	DWORD dwHdSize=sizeof(DATHEADER)+sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)
		+sizeof(RGBQUAD)*m_numberofcolor;
	m_bfsize=dwHdSize+dwSizeUsedRow;
	float ratioRow=((float)m_bfsize/(float)m_Dib.GetFileSize());//按行掃描的壓縮比:
	m_bfsize=dwHdSize+dwSizeUsedCol;
	float ratioCol=((float)m_bfsize/(float)m_Dib.GetFileSize());//按列掃描的壓縮比:
	
	float ratio=(ratioRow<ratioCol)?ratioRow:ratioCol;//取小的
	::gcvt( ratio*100, 4, m_compressionRatio);//float to string
	::strcat(m_compressionRatio,"%");
	
	if(ratio==ratioRow)
		datHdr.iWay=0;
	else if(ratio==ratioCol)
		datHdr.iWay=1;
	//寫入位圖頭信息
	dibfile.Write((LPSTR)&datHdr,sizeof(DATHEADER));
	dibfile.Write((void *)&m_Dib.bitmapFileHeader,sizeof(BITMAPFILEHEADER));
	dibfile.Write(m_Dib.m_pBitmapInfoHeader,sizeof(BITMAPINFOHEADER));
	dibfile.Write(m_Dib.m_pRGB,sizeof(RGBQUAD)*m_numberofcolor);
	//寫入最小壓縮比的壓縮后數(shù)據(jù)
	if(datHdr.iWay==0)
		dibfile.WriteHuge((LPSTR)bufferOutRow, dwSizeUsedRow);
	else if(datHdr.iWay==1)
		dibfile.WriteHuge((LPSTR)bufferOutCol, dwSizeUsedCol);
	//顯示文件信息
	m_filename=dibfile.GetFileName();
	m_numberofcolor=-1;
	CString str="被壓縮后文件名稱->";
	OnDrawTEXT(str);
	//寫入壓縮后的數(shù)據(jù)編碼文件(十進(jìn)制)
	char strFileName[256];
	strcpy(strFileName,dibfile.GetFilePath());
	strcat(strFileName,"行掃描");
	strcat(strFileName , ".txt");
	FILE *fp;
	fp=fopen(strFileName,"w");
	fprintf(fp,"%s","游程標(biāo)志=");
	fprintf(fp,"%d ",identify);
	fprintf(fp,"%s","壓縮比=");
	fprintf(fp,"%f\n",ratioRow);
	fprintf(fp,"%s%d %s%d\n","圖像寬度=",bW,"圖像高度=",bH);
	if(datHdr.iWay==0)
		fprintf(fp,"%s\n\n","-->由于壓縮比低于列掃描方式,所以被程序采用!");
	int irow=0;//換行計(jì)數(shù)
	char c='\n';
	
	for(i=0;i<dwSizeUsedRow;i++)
	{	
		fprintf(fp,"%d  ",bufferOutRow[i]);irow++;
		if(irow==30)
		{
			fprintf(fp,"%c",c);irow=0;
		}
	}
	fclose(fp);
	
	strcpy(strFileName,dibfile.GetFilePath());
	strcat(strFileName,"列掃描");
	strcat(strFileName , ".txt");
	fp=fopen(strFileName,"w");
	fprintf(fp,"%s","游程標(biāo)志=");
	fprintf(fp,"%d ",identify);
	fprintf(fp,"%s","壓縮比=");
	fprintf(fp,"%f\n",ratioCol);
	fprintf(fp,"%s%d %s%d\n","圖像寬度=",bW,"圖像高度=",bH);
	if(datHdr.iWay==1)
		fprintf(fp,"%s\n\n","-->由于壓縮比低于行掃描方式,所以被程序采用!");
	irow=0;//換行計(jì)數(shù)
	for(i=0;i<dwSizeUsedCol;i++)
	{	
			fprintf(fp,"%d  ",bufferOutCol[i]);irow++;
			if(irow==30)
			{
				fprintf(fp,"%c",c);irow=0;
			}
	}
	fclose(fp);
	
	return TRUE;
}

BOOL CBmpCompressDlg::DeCompressBmp(CFile & dibfile)
{  
	//讀取DAT文件結(jié)構(gòu)信息
	DATHEADER datHdr;
	m_CompressFile.Read((LPSTR)&datHdr,sizeof(DATHEADER));
	WORD bW= WIDTHBYTES(datHdr.wWidth * 8);
	WORD bH=datHdr.wHeight;
	WORD numOfColor=datHdr.numberOfColor;
	DWORD realSize=datHdr.biSizeImage;
	BYTE identify=datHdr.identify;
	//處理位圖文件結(jié)構(gòu)頭,信息頭,顏色表
	LPBYTE buffer;
	buffer=new BYTE[sizeof(BITMAPFILEHEADER)];
	m_CompressFile.Read(buffer,sizeof(BITMAPFILEHEADER));
	dibfile.Write(buffer,sizeof(BITMAPFILEHEADER));
	buffer=new BYTE[sizeof(BITMAPINFOHEADER)];
	m_CompressFile.Read(buffer,sizeof(BITMAPINFOHEADER));
	dibfile.Write(buffer,sizeof(BITMAPINFOHEADER));
	buffer=new BYTE[sizeof(RGBQUAD)*numOfColor];
	m_CompressFile.Read(buffer,sizeof(RGBQUAD)*numOfColor);
	dibfile.Write(buffer,sizeof(RGBQUAD)*numOfColor);
	//解壓縮位圖(像素)數(shù)據(jù)
	LPBYTE bufferIn;
	LPBYTE bufferOut;
	DWORD i=0;
	DWORD size=0;//bufferOut的下標(biāo)
	int iCount=0;//重復(fù)字符個(gè)數(shù)
	BYTE bChar;
	DWORD sizeData=0;
	sizeData=m_CompressFile.GetLength()-sizeof(DATHEADER)-
		sizeof(BITMAPFILEHEADER)-sizeof(BITMAPINFOHEADER)
		-sizeof(RGBQUAD)*numOfColor;
	bufferIn=new BYTE[sizeData];
	m_CompressFile.Read(bufferIn,sizeData);
	bufferOut=new BYTE[bW*bH*2];
	for(i=0;i<sizeData;i++)
	{
		bChar=bufferIn[i];
		if(bChar==identify)
		{
			bChar=bufferIn[i+1];
			iCount=(int)bChar;
			bChar=bufferIn[i+2];
			i+=2;
			memset(bufferOut,bChar,iCount);
			bufferOut+=iCount;
			size+=iCount;
		}
		else
		{
			*bufferOut=bChar;
			bufferOut+=1;
			size+=1;
		}
	}
	bufferOut-=size;
	
	if(datHdr.iWay==0) //行掃描的解壓存儲(chǔ)
	{
		dibfile.WriteHuge((LPSTR)bufferOut,size);
		delete[] bufferOut;
	}
	else if(datHdr.iWay==1) //列掃描的解壓
	{
		BYTE **bufferOutCol=new BYTE *[bH];
		for(int index=0;index<bH;index++)
			bufferOutCol[index]=new BYTE[bW];
		int	row=0;
		int col=0;
		BYTE bcharX='0';
		DWORD dwSz=0;
		for(col=0;col<bW;col++)
			for(row=0;row<bH;row++)
			{
				bcharX=bufferOut[dwSz];
				bufferOutCol[row][col]=bcharX;
				dwSz++;
			}
		LPBYTE bufferResultCol;
		bufferResultCol=new BYTE[dwSz];
		for(row=0;row<bH;row++)
			for(col=0;col<bW;col++)
			{
				bcharX=bufferOutCol[row][col];
				*bufferResultCol=bcharX;
				bufferResultCol++;
			}
		bufferResultCol-=dwSz;
		dibfile.WriteHuge((LPSTR)bufferResultCol,dwSz);
		delete[] bufferResultCol;
	}

	CString str="解壓縮后文件名稱->";
	m_bfsize=dibfile.GetLength();
	OnDrawTEXT(str);
	m_CompressFile.SetFilePath("");
	dibfile.Close();
	return TRUE;
}


void CBmpCompressDlg::OnDisplay() //顯示位圖
{
	// TODO: Add your control notification handler code here
	//圖象顯示比例
	CWnd *pBtn=GetDlgItem(IDDDISPLAY);
	CString str;
	pBtn->GetWindowText(str);
	if(m_Dib.GetData()!=NULL)
	{
		if(str=="Display")
		{
			pBtn->SetWindowText("HidePicture");
			m_ratio=1.0;
			m_scale.SetPos((int)(m_ratio*100));
			OnDrawBMP();
		}
		else
		{
			OnHideBMP();
			m_scale.SetPos(0);
		}
	}
	else
	{
		AfxMessageBox("請(qǐng)先裝載位圖文件!");
		return ;
	}
	
}

void CBmpCompressDlg::OnHideBMP()
{
	//刷新顯示區(qū)
	CRect rect;
	CWnd *pDisplay=GetDlgItem(IDC_BMPINFO);
	pDisplay->GetWindowRect(rect);
	ScreenToClient(rect);
	CDC * pDC=GetDC();
	CBrush brush(RGB(255,255,255));
	rect.SetRect(rect.left+5,rect.top+5,rect.right-5,rect.bottom-5);
	pDC->FillRect(&rect,&brush);
	CWnd *pBtn=GetDlgItem(IDDDISPLAY);
	CString str;
	pBtn->GetWindowText(str);
	pBtn->SetWindowText("Display");
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩欧美一区二区不卡| 日韩午夜激情av| 久久精品国产99国产| 亚洲国产精华液网站w| 91精品在线免费| 99re亚洲国产精品| 美女视频网站久久| 一区二区三区四区激情| 国产欧美精品日韩区二区麻豆天美| 欧美日韩一区在线观看| 成人免费视频视频在线观看免费| 美女一区二区三区在线观看| 亚洲国产精品人人做人人爽| 国产精品乱码妇女bbbb| 欧美精品一区二区三区一线天视频| 欧美日韩国产一级| 91麻豆123| av不卡一区二区三区| 国内一区二区在线| 奇米一区二区三区| 亚洲一区二区三区美女| 亚洲蜜臀av乱码久久精品| 国产精品免费网站在线观看| 国产亚洲人成网站| 精品国产凹凸成av人导航| 日韩一区二区三区免费看 | av一区二区三区在线| 精品中文字幕一区二区| 午夜激情久久久| 亚洲狠狠爱一区二区三区| 日本一区二区电影| 亚洲国产精品二十页| 久久九九国产精品| 久久久国产精品麻豆| 欧美xxxx在线观看| 欧美va亚洲va国产综合| 欧美成人精品二区三区99精品| 欧美一级片在线| 666欧美在线视频| 91精品国产免费| 日韩欧美国产三级电影视频| 欧美精品色综合| 日韩午夜在线观看视频| 欧美大片顶级少妇| 久久先锋影音av| 久久久91精品国产一区二区精品| 亚洲精品一区二区三区99 | 亚洲人成网站在线| 亚洲欧洲精品天堂一级| 中文字幕亚洲电影| 亚洲美女屁股眼交3| 亚洲图片一区二区| 日本大胆欧美人术艺术动态| 麻豆精品新av中文字幕| 国产一区二区导航在线播放| 成人午夜视频网站| 色婷婷国产精品| 欧美日韩一卡二卡三卡 | 国产精品不卡在线观看| 最近日韩中文字幕| 亚洲妇女屁股眼交7| 美女视频免费一区| 国产在线精品国自产拍免费| 成人一区二区三区视频在线观看 | 欧美制服丝袜第一页| 777奇米四色成人影色区| 欧美成人综合网站| 国产精品―色哟哟| 亚洲高清久久久| 国产一区不卡在线| 色婷婷av一区二区三区软件| 欧美精品777| 久久久蜜桃精品| 亚洲欧美日韩久久精品| 美女一区二区久久| 成人h精品动漫一区二区三区| 色激情天天射综合网| 欧美一区二区在线免费观看| 久久精品男人天堂av| 亚洲精品伦理在线| 免费成人美女在线观看.| 成人综合在线观看| 欧美老年两性高潮| 欧美国产精品v| 亚洲二区在线观看| 国产成人综合自拍| 91精品国产一区二区三区香蕉| 国产亚洲福利社区一区| 亚洲国产精品久久人人爱蜜臀| 经典三级在线一区| 在线免费不卡视频| 欧美极品美女视频| 日本不卡免费在线视频| 99在线视频精品| 26uuu欧美| 天堂一区二区在线| www.爱久久.com| 久久伊人中文字幕| 视频一区视频二区中文字幕| 99re热视频精品| ww亚洲ww在线观看国产| 婷婷开心激情综合| 91国在线观看| 国产精品久久久久久久岛一牛影视 | 香蕉久久一区二区不卡无毒影院 | 在线视频观看一区| 国产精品乱码一区二区三区软件 | 欧美午夜免费电影| 国产精品国产三级国产aⅴ中文| 久久国产精品区| 欧美日韩国产一区| 亚洲激情在线播放| 成人黄色一级视频| 欧美精品一区二区在线观看| 日韩成人dvd| 欧美日韩一二三| 亚洲美腿欧美偷拍| 99精品在线免费| 国产精品视频yy9299一区| 九色porny丨国产精品| 88在线观看91蜜桃国自产| 亚洲图片欧美一区| 欧美视频一区在线观看| 夜夜爽夜夜爽精品视频| 色欲综合视频天天天| 国产精品久久综合| www.在线欧美| 国产精品福利一区二区三区| 国产精品2024| 国产日韩精品一区二区三区在线| 激情综合色综合久久| 欧美成人伊人久久综合网| 日本美女一区二区三区| 日韩亚洲欧美高清| 精品一区二区三区欧美| 欧美mv日韩mv国产网站| 国产一区二区三区免费播放| 欧美成人免费网站| 国产精品一区二区三区乱码| 久久久噜噜噜久噜久久综合| 国产一区二三区| 国产亲近乱来精品视频 | 欧美色视频在线| 亚洲一区二区三区免费视频| 欧美女孩性生活视频| 天堂蜜桃91精品| 欧美成人a视频| 国产成人h网站| 国产精品久久久久久妇女6080| 99re这里只有精品首页| 亚洲一区二区三区爽爽爽爽爽| 在线播放91灌醉迷j高跟美女| 偷窥少妇高潮呻吟av久久免费| 日韩丝袜情趣美女图片| 国产综合色精品一区二区三区| 久久久亚洲精品石原莉奈| 成人免费毛片嘿嘿连载视频| 一级日本不卡的影视| 在线不卡中文字幕播放| 青娱乐精品视频在线| 久久久精品日韩欧美| 91猫先生在线| 日本欧美一区二区| 国产欧美一区二区精品秋霞影院| jlzzjlzz亚洲日本少妇| 亚洲午夜电影在线| 久久综合久久鬼色| 91在线观看污| 日本美女一区二区三区视频| 欧美激情在线看| 欧美日韩精品一区二区天天拍小说| 麻豆91精品视频| 欧美国产日韩在线观看| 欧美日韩国产精选| 国产91精品免费| 亚洲电影一级黄| 国产三级精品视频| 欧美日韩一区二区三区免费看| 国内精品久久久久影院薰衣草| 亚洲日韩欧美一区二区在线| 91精品国产综合久久久久久漫画| 国产精品一区二区91| 亚洲电影在线播放| 中文无字幕一区二区三区| 777久久久精品| 91天堂素人约啪| 国产一区二区三区日韩| 有码一区二区三区| 久久夜色精品国产噜噜av| 91老师片黄在线观看| 国精产品一区一区三区mba桃花| 亚洲精品成人天堂一二三| 久久免费的精品国产v∧| 欧美日韩免费不卡视频一区二区三区| 国产精品白丝jk黑袜喷水| 爽爽淫人综合网网站| 亚洲日本一区二区三区| 久久精品夜夜夜夜久久| 在线播放视频一区| 91久久精品一区二区二区|