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

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

?? bmpcompressdlg.cpp

?? bmp圖像的離散余弦變換壓縮 是一種有損的壓縮
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
// BmpCompressDlg.cpp : implementation file

#include "stdafx.h"
#include "BmpCompress.h"
#include "BmpCompressDlg.h"
#include <afxdlgs.h> 
#include "windowsx.h"
#include <stdlib.h>
#include <stdio.h>
#include <process.h>


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

#define WIDTHBYTES(bits)    (((bits) + 31) / 32 * 4)
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// Dialog Data
	//{{AFX_DATA(CAboutDlg)
	enum { IDD = IDD_ABOUTBOX };
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CAboutDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	//{{AFX_MSG(CAboutDlg)
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
	//{{AFX_DATA_INIT(CAboutDlg)
	//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAboutDlg)
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
	//{{AFX_MSG_MAP(CAboutDlg)
		// No message handlers
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CBmpCompressDlg dialog

CBmpCompressDlg::CBmpCompressDlg(CWnd* pParent /*=NULL*/)
: CDialog(CBmpCompressDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CBmpCompressDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
	m_ratio=1;
	m_Dib.m_pData =NULL;
	m_CompressFile.SetFilePath("");
	
}

void CBmpCompressDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CBmpCompressDlg)
	DDX_Control(pDX, IDC_SCALE, m_scale);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CBmpCompressDlg, CDialog)
	//{{AFX_MSG_MAP(CBmpCompressDlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDLOAD, OnLoad)
	ON_BN_CLICKED(IDCOMPRESS, OnCompress)
	ON_BN_CLICKED(IDDECOMPRESS, OnDecompress)
	ON_NOTIFY(NM_OUTOFMEMORY, IDC_SCALE, OnOutofmemoryScaleDisplayBMP)
	ON_NOTIFY(NM_RELEASEDCAPTURE, IDC_SCALE, OnReleasedcaptureScale)
	ON_BN_CLICKED(IDDDISPLAY, OnDisplay)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CBmpCompressDlg message handlers

BOOL CBmpCompressDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Add "About..." menu item to system menu.

	// IDM_ABOUTBOX must be in the system command range.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	// TODO: Add extra initialization here
	m_scale.SetRange(10,400,FALSE);
	return TRUE;  // return TRUE  unless you set the focus to a control
}

void CBmpCompressDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CBmpCompressDlg::OnPaint() 
{

	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
	
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CBmpCompressDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

void CBmpCompressDlg::OnLoad() 
{
	// TODO: Add your control notification handler code here
	char  strFileName[256];
	CString str;
	CString FileExtName;
	CFileDialog dlgLoad(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, 
     "位圖文件(*.bmp)|*.bmp|壓縮文件(*.dat)|*.dat|All files|*.*||");
	if((dlgLoad.DoModal())!=IDOK)
		return ;
	FileExtName=dlgLoad.GetFileExt();
	if(FileExtName=="bmp")
	{	
		m_Dib.m_pData=NULL;
		::DeleteObject(&m_Dib);
		OnHideBMP();

		strcpy(strFileName,dlgLoad.GetPathName());
		m_Dib.LoadFile(strFileName);//裝載位圖文件
		//寫入壓縮后的數據編碼文件(十進制)
		char strFileName[256];
		strcpy(strFileName , dlgLoad.GetFileName());
		strcat(strFileName,".txt");
		FILE *fp;
		BYTE *buffer;
		buffer=new BYTE[m_Dib.size];
		buffer=m_Dib.GetData();
		fp=fopen(strFileName,"w");
		UINT irow=0;//換行顯示計數標志
		char c='\n';
		for(DWORD i=0;i<m_Dib.GetSize();i++)
		{	
			fprintf(fp,"%d  ",buffer[i]);irow++;
			if(irow==m_Dib.GetWidth())
			{fprintf(fp,"%c",c);irow=0;}
		}
		fclose(fp);
		//顯示文件信息
		m_filename=m_Dib.GetFileTle();
		m_bfsize=m_Dib.bitmapFileHeader.bfSize;
		m_numberofcolor=m_Dib.GetNumberOfColors();
		str="位圖文件名稱->";
		if(m_CompressFile.GetFilePath()!="")
			::DeleteObject(&m_CompressFile);
	}
	else if(FileExtName=="dat")
	{
		str="壓縮文件名稱->";
		m_CompressFile.Open(dlgLoad.GetPathName(),CFile::modeRead );
		m_filename=m_CompressFile.GetFileName();
		m_bfsize=m_CompressFile.GetLength();
		m_Dib.m_pData=NULL;
		::DeleteObject(&m_Dib);
		OnHideBMP();
	}
	OnDrawTEXT(str);

}



void CBmpCompressDlg::OnCompress() 
{
	// TODO: Add your control notification handler code here
	//Compress the FileBMP;display the fileinfo after compression;
	//notice:壓縮后文件的名字(最好與原文件不同)位置及格式
	// TODO: Add your control notification handler code here

	//寫入壓縮后的數據編碼文件(十進制)
		char strFileName[256];

		strcpy(strFileName ,"compressed");
		strcat(strFileName,".txt");
		FILE *fp;
		BYTE *buffer;
		buffer=new BYTE[m_Dib.size];
		buffer=m_Dib.GetData();
		fp=fopen(strFileName,"w");
		UINT irow=0;//換行顯示計數標志
		char c='\n';
		for(DWORD i=0;i<m_Dib.GetSize();i++)
		{	
			fprintf(fp,"%d  ",buffer[i]);irow++;
			if(irow==m_Dib.GetWidth())
			{fprintf(fp,"%c",c);irow=0;}
		}
		fclose(fp);

	if(m_Dib.GetData()!=NULL)
	{
	static int nIndex=1;
	CString PathName;
	CString m_txtString;  
	CString FileName;
	CString FileExtName;
	char szFilter[]="壓縮文件(.dat)|*.dat|All Files|*.*||";
	CFileDialog dlgSavefile(FALSE, NULL, NULL, OFN_HIDEREADONLY,szFilter);
	dlgSavefile.m_ofn.nFilterIndex=(DWORD)nIndex;
	if((dlgSavefile.DoModal())==IDOK)
	{
		PathName=dlgSavefile.GetPathName();
		nIndex = (int) dlgSavefile.m_ofn.nFilterIndex;
		FileName=dlgSavefile.GetFileName();
		FileExtName=dlgSavefile.GetFileExt();

		if(FileExtName=="")
			PathName+=".dat";
		CFile CompressionFile(PathName,CFile::modeCreate | CFile::modeWrite );
		if(CompressBMP(CompressionFile)==TRUE)
			MessageBox("壓縮成功!", "系統提示" , 
			MB_ICONINFORMATION | MB_OK);
		m_Dib.m_pData=NULL;
		::DeleteObject(&m_Dib);
		OnHideBMP();

	}
	}
	else
	{
		MessageBox("請先裝載要壓縮的位圖文件!", "系統提示" , 
			MB_ICONINFORMATION | MB_OK);
	}
}

void CBmpCompressDlg::OnDecompress() 
{
	// TODO: Add your control notification handler code here
	//Dompress the FileBMP;display the fileinfo after compression;
	//notice:解壓縮后文件的名字,位置格式
	if(m_CompressFile.GetFilePath()!="")
	{static int nIndex=1;
	CString PathName;
	CString m_txtString;  
	CString FileName;
	CString FileExtName;
	char szFilter[]="位圖文件(.bmp)|*.bmp|All Files|*.*||";
	CFileDialog dlgSavefile(FALSE, NULL, NULL, OFN_HIDEREADONLY,szFilter);
	dlgSavefile.m_ofn.nFilterIndex=(DWORD)nIndex;
	if((dlgSavefile.DoModal())==IDOK)
	{
		PathName=dlgSavefile.GetPathName();
		nIndex = (int) dlgSavefile.m_ofn.nFilterIndex;
		FileName=dlgSavefile.GetFileName();
		FileExtName=dlgSavefile.GetFileExt();
		if(FileExtName=="")
		{PathName+=".bmp";FileName+=".bmp";}
		m_filename=FileName;
		CFile DecompressionFile(PathName,CFile::modeCreate | CFile::modeWrite );
		if(DeCompressBmp(DecompressionFile)==TRUE)
			MessageBox("解壓縮成功!", "系統提示" , 
			MB_ICONINFORMATION | MB_OK);
		m_CompressFile.Close();
		m_CompressFile.SetFilePath("");
		::DeleteObject(&m_CompressFile);
		
	}
	}
	else
	{
		MessageBox("請先裝載要解壓縮的文件(.dat)!", "系統提示" , 
			MB_ICONINFORMATION | MB_OK);
	}

}

CPalette * CBmpCompressDlg::CreateBitmpPalette(CDib *pBitmap)
{

	LPLOGPALETTE lpPal;      // pointer to a logical palette
	UINT i;                   // loop index

	LPRGBQUAD pRGBTable=pBitmap->GetRGB();
	UINT numberOfColors=pBitmap->GetNumberOfColors();
	if (numberOfColors != 0)
	{
		/* allocate memory block for logical palette */
		/* if not enough memory, clean up and return NULL */

		lpPal = (LPLOGPALETTE)GlobalAllocPtr(GHND, sizeof(LOGPALETTE)
									+ sizeof(PALETTEENTRY)
									* numberOfColors);
		if (lpPal == 0) return FALSE;

		/* set version and number of palette entries */
		lpPal->palVersion = 0x300;
		lpPal->palNumEntries = numberOfColors;

		for (i = 0; i < numberOfColors; i++)
		{
			lpPal->palPalEntry[i].peRed = pRGBTable[i].rgbRed;
			lpPal->palPalEntry[i].peGreen =pRGBTable[i].rgbGreen;
			lpPal->palPalEntry[i].peBlue = pRGBTable[i].rgbBlue;
			lpPal->palPalEntry[i].peFlags = 0;
		}

		/* create the palette and get handle to it */
		m_hPalette=new CPalette;
		m_hPalette->CreatePalette(lpPal);
		GlobalFreePtr(lpPal);
		delete m_hPalette;
	}
	return m_hPalette;
}

void CBmpCompressDlg::OnDrawBMP()
{
	//刷新顯示區
	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);
	//處理圖像數據
	BYTE *pBitmapData= m_Dib.GetData();
	LPBITMAPINFO pBitmapInfo=m_Dib.GetInfo();
	int bitmapHeight=m_Dib.GetHeight();
	int bitmapWidth=m_Dib.GetWidth();
	int scaledWidth=(int)(bitmapWidth * m_ratio);
	int scaledHeight=(int)(bitmapHeight * m_ratio);
	scaledWidth=(scaledWidth>rect.Width())?(rect.Width()-5):scaledWidth;
	scaledHeight=(scaledHeight>rect.Height())?(rect.Height()-5):scaledHeight;
	if(m_Dib.GetRGB())  //has color table
	{
		CPalette *hPalette=CreateBitmpPalette(&m_Dib);
		//將已創建的調色版用到設備上下文中
		CPalette *hOldPalette=pDC->SelectPalette(hPalette,true);
		//實現調色版
		pDC->RealizePalette();
		::StretchDIBits(pDC->GetSafeHdc(),rect.left+5 ,rect.top+5 ,scaledWidth,scaledHeight,
			0 ,0,bitmapWidth,bitmapHeight,pBitmapData,pBitmapInfo,
			DIB_RGB_COLORS,	SRCCOPY);
		pDC->SelectPalette(hOldPalette,true);
		::DeleteObject(m_hPalette);
	}
	else  //has no color table
	{
		::StretchDIBits(pDC->GetSafeHdc(),rect.left+5 ,rect.top+5 ,scaledWidth,scaledHeight,
		0 ,0,bitmapWidth,bitmapHeight,pBitmapData,pBitmapInfo,
		DIB_PAL_COLORS,	SRCCOPY);		
	}
}

void CBmpCompressDlg::OnDrawTEXT(CString &strTitle)
{
	//刷新顯示區
	
	CRect rect;
	CWnd *pDisplay=GetDlgItem(IDC_FILEINFO);
	pDisplay->GetWindowRect(rect);
	ScreenToClient(rect);
	int left=rect.left+5;
	int top=rect.top+5;
	rect.SetRect(left,top,rect.right-5,rect.bottom-5);
	CBrush brush(RGB(255,255,255));
	CDC *pDC=GetDC();
	pDC->FillRect(&rect,&brush);
	//顯示文件信息
	CString str;
	char strChar[30],strChar1[20];
	strcpy(strChar,strTitle);
	strcat(strChar,m_filename);
	pDC->TextOut(left+5,top+5,strChar);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产高清久久久久| 精品三级av在线| 日韩亚洲电影在线| 亚洲另类中文字| 精品一区二区三区的国产在线播放| av男人天堂一区| 日韩美女在线视频| 亚洲福中文字幕伊人影院| 国产成人无遮挡在线视频| 欧美久久久久久久久| 国产精品国产三级国产三级人妇 | 中文字幕一区二区三区蜜月| 日日摸夜夜添夜夜添精品视频 | 麻豆成人91精品二区三区| 91啦中文在线观看| 国产精品久久久久久久久晋中 | 久久综合色8888| 日韩中文字幕区一区有砖一区| 99久久综合色| 国产欧美精品国产国产专区| 国模少妇一区二区三区| 在线不卡a资源高清| 亚洲国产中文字幕在线视频综合| 成人免费精品视频| 国产精品伦理一区二区| 国产精品资源在线| 久久久精品综合| 国产一区久久久| 国产亚洲美州欧州综合国| 麻豆久久久久久久| 日韩美女视频在线| 免费成人美女在线观看.| 欧美精品久久久久久久久老牛影院| 亚洲精品你懂的| 在线观看视频一区二区 | 久久亚洲私人国产精品va媚药| 麻豆精品新av中文字幕| 日韩精品自拍偷拍| 国产成人精品免费一区二区| 久久先锋影音av鲁色资源网| 国产精品一线二线三线| 国产亚洲精品aa| 92精品国产成人观看免费| 国产精品久久久久影院老司| 91在线观看高清| 一区二区成人在线| 欧美日韩国产123区| 蜜臀国产一区二区三区在线播放| 精品日韩成人av| 国产99精品视频| 亚洲人成网站影音先锋播放| 欧美午夜精品一区二区蜜桃 | 欧美成人r级一区二区三区| 免费观看成人av| 国产亚洲综合色| 色菇凉天天综合网| 日韩电影在线一区| 日本一区二区三区国色天香| 99re这里只有精品首页| 亚洲一区二区三区四区不卡| 91精品国产综合久久福利软件| 久久99久国产精品黄毛片色诱| 国产日韩精品一区二区三区| 91蜜桃网址入口| 奇米亚洲午夜久久精品| 欧美国产日韩一二三区| 欧美制服丝袜第一页| 久久成人免费网站| 亚洲人成人一区二区在线观看| 欧美一区二区福利在线| 国产成人高清视频| 亚洲成国产人片在线观看| 久久精品视频在线看| 色天使久久综合网天天| 精品一区二区成人精品| 一区二区三区在线免费播放| 久久日韩精品一区二区五区| 色88888久久久久久影院按摩| 日韩成人av影视| 亚洲女同女同女同女同女同69| 日韩欧美一区二区不卡| 91福利在线免费观看| 国产久卡久卡久卡久卡视频精品| 亚洲成人第一页| 中文字幕欧美区| 日韩一区二区三区免费看| 一本大道久久精品懂色aⅴ| 激情小说欧美图片| 日韩精品一二三| 亚洲欧美日韩在线| 国产亚洲一二三区| 欧美精品v国产精品v日韩精品| 成人18精品视频| 激情av综合网| 久久精品国产精品亚洲精品| 一区二区三区四区精品在线视频 | 丁香激情综合国产| 久久99九九99精品| 蜜臀久久99精品久久久久宅男 | 中文字幕免费一区| 精品91自产拍在线观看一区| 欧美人狂配大交3d怪物一区| 一本色道综合亚洲| 99久久久国产精品| 不卡一区二区三区四区| 国产精品亚洲人在线观看| 青青草视频一区| 午夜私人影院久久久久| 一区二区三区在线不卡| 亚洲欧美日韩国产手机在线| 国产精品无圣光一区二区| 精品国产污污免费网站入口 | 九色porny丨国产精品| 日韩精品欧美精品| 五月婷婷综合激情| 日韩国产在线观看一区| 性感美女极品91精品| 视频一区二区中文字幕| 日韩激情一二三区| 久久99久久久欧美国产| 久久成人av少妇免费| 黄页视频在线91| 国v精品久久久网| 99精品偷自拍| 欧美最新大片在线看| 在线视频一区二区三| 欧美日本国产一区| 日韩欧美高清dvd碟片| 精品国产乱码久久久久久夜甘婷婷| 日韩一级大片在线| 久久久久久久国产精品影院| 国产视频在线观看一区二区三区| 国产视频亚洲色图| 亚洲精品videosex极品| 亚洲午夜电影网| 久久精品国产999大香线蕉| 精品一区二区精品| 99久久精品情趣| 精品视频999| 久久综合丝袜日本网| 国产精品成人免费精品自在线观看 | 色综合av在线| 制服丝袜中文字幕亚洲| 精品国产91久久久久久久妲己 | 亚洲成av人片一区二区三区| 婷婷久久综合九色综合绿巨人 | 国产三区在线成人av| 亚洲精品国产a| 久久99精品久久久久久| 成人app在线观看| 91精品麻豆日日躁夜夜躁| 久久精品人人做人人综合 | 91视频在线看| 日韩免费一区二区| 亚洲天堂福利av| 日本美女视频一区二区| 国产盗摄视频一区二区三区| 色av成人天堂桃色av| 欧美一二三在线| 亚洲色图都市小说| 精品无人码麻豆乱码1区2区| aaa亚洲精品一二三区| 欧美揉bbbbb揉bbbbb| 亚洲精品一区二区精华| 亚洲精品日产精品乱码不卡| 国产一区二区三区免费看| 在线观看欧美日本| 国产精品无码永久免费888| 亚洲国产精品精华液网站| 丰满亚洲少妇av| 日韩视频免费观看高清完整版| 亚洲视频免费观看| 国产九九视频一区二区三区| 欧美美女喷水视频| 国产精品二三区| 国产一区激情在线| 91精品在线免费观看| 亚洲欧美另类小说| 成年人国产精品| 国产色产综合色产在线视频| 日本不卡的三区四区五区| 色国产综合视频| 亚洲乱码国产乱码精品精98午夜 | 日本高清不卡视频| 国产日韩亚洲欧美综合| 美国十次综合导航| 9191成人精品久久| 亚洲精品videosex极品| eeuss国产一区二区三区| 久久久久久久电影| 韩国av一区二区| 欧美v国产在线一区二区三区| 日韩黄色片在线观看| 欧美日韩视频在线一区二区| 亚洲精品老司机| 色天天综合色天天久久| 亚洲美女视频在线| 在线视频国产一区| 亚洲最新视频在线观看| 欧美综合一区二区|