亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
日本va欧美va欧美va精品| 国产欧美va欧美不卡在线| 午夜精品久久久久久久久久| 99re亚洲国产精品| 亚洲三级久久久| 色婷婷久久久亚洲一区二区三区| 亚洲视频免费看| 欧美亚洲高清一区| 三级不卡在线观看| 久久精品一区二区三区不卡牛牛| 国产福利一区在线| 一区二区三区在线观看视频| 欧美日韩一区二区在线视频| 免费的成人av| 国产精品理论在线观看| 欧美日精品一区视频| 热久久一区二区| 国产人成亚洲第一网站在线播放 | voyeur盗摄精品| 亚洲精品自拍动漫在线| 欧美人与禽zozo性伦| 久久国产精品99精品国产| 欧美激情一区二区三区不卡| 91女神在线视频| 蜜臀av一区二区在线免费观看| 国产欧美一区二区精品仙草咪| 色狠狠综合天天综合综合| 蜜桃av一区二区在线观看| 国产精品色哟哟| 欧美日韩国产区一| 国产精品一二二区| 亚洲女厕所小便bbb| 日韩视频不卡中文| 成av人片一区二区| 精品影视av免费| 亚洲黄色在线视频| 精品久久久久久久人人人人传媒| 91麻豆精品在线观看| 久久国产婷婷国产香蕉| 亚洲色图一区二区三区| 欧美videossexotv100| 色网综合在线观看| 国产精品一二三区| 美女精品自拍一二三四| 伊人一区二区三区| 欧美经典一区二区| 精品入口麻豆88视频| 91久久免费观看| 国产电影精品久久禁18| 亚洲成av人片一区二区梦乃| 国产精品天美传媒| 2023国产一二三区日本精品2022| 欧美三日本三级三级在线播放| 成人免费视频视频在线观看免费| 日本午夜一本久久久综合| 亚洲男人都懂的| 国产日韩一级二级三级| 日韩欧美国产综合在线一区二区三区| 91在线porny国产在线看| 国产精品正在播放| 久久国产欧美日韩精品| 丝袜亚洲另类欧美综合| 一区二区三区在线视频播放 | 欧美一区二区三区性视频| 91在线视频网址| 成人午夜激情视频| 国产a久久麻豆| 国产精品77777竹菊影视小说| 免费黄网站欧美| 免费在线观看视频一区| 亚洲成av人影院| 日韩精品免费视频人成| 一级日本不卡的影视| 亚洲欧美日韩在线| 综合av第一页| 亚洲激情校园春色| 亚洲激情五月婷婷| 亚洲国产精品麻豆| 日本不卡1234视频| 久久国产尿小便嘘嘘尿| 日韩成人一级片| 免费看精品久久片| 国产美女娇喘av呻吟久久| 国产在线视频一区二区| 激情欧美一区二区| 成人美女视频在线观看| www.亚洲精品| 在线免费精品视频| 欧美日韩mp4| 日韩一区二区免费高清| 日韩精品一区二区三区三区免费| 欧美电影免费观看高清完整版在| 91精品国产91久久久久久一区二区 | 99精品桃花视频在线观看| 99vv1com这只有精品| 在线视频国内自拍亚洲视频| 欧美疯狂做受xxxx富婆| 精品国产一区二区在线观看| 久久久精品中文字幕麻豆发布| 欧美经典三级视频一区二区三区| 亚洲欧美日韩成人高清在线一区| 亚洲成人av中文| 久久国产精品99精品国产| 岛国一区二区三区| 91搞黄在线观看| 日韩欧美一级特黄在线播放| 久久精品免费在线观看| 亚洲啪啪综合av一区二区三区| 图片区日韩欧美亚洲| 国产河南妇女毛片精品久久久| 国产999精品久久久久久 | 欧美亚洲丝袜传媒另类| 制服丝袜中文字幕一区| 久久久99久久精品欧美| 1000部国产精品成人观看| 亚洲成av人影院| 国产精品一区二区在线观看网站 | 在线视频国内一区二区| 日韩精品一区在线| 中文字幕高清一区| 图片区小说区区亚洲影院| 成人永久免费视频| 欧美一区二区视频在线观看2020| 久久久精品人体av艺术| 亚洲成人免费视频| 国产91富婆露脸刺激对白| 欧美伊人精品成人久久综合97| 精品久久久久久久久久久院品网| 亚洲精品五月天| 久久精品国产99国产| 成人午夜精品一区二区三区| 欧美一卡2卡3卡4卡| 亚洲精品高清在线| 国产精品一区二区果冻传媒| 欧美久久久久久久久| 中文字幕一区在线观看视频| 麻豆成人综合网| 欧美少妇xxx| 亚洲色图视频网| 国产盗摄女厕一区二区三区| 91精品国产91综合久久蜜臀| 亚洲一区二区三区四区在线免费观看| 国产成人高清视频| 日韩免费高清电影| 丝袜国产日韩另类美女| 91久久精品一区二区三| 国产精品久久国产精麻豆99网站| 精品在线一区二区| 91精品国产高清一区二区三区蜜臀| 亚洲精品va在线观看| 91视视频在线直接观看在线看网页在线看| 欧美变态tickle挠乳网站| 天堂av在线一区| 欧美日韩一区二区三区四区| 亚洲色欲色欲www在线观看| 成人听书哪个软件好| 久久久精品tv| 精品亚洲欧美一区| 7777精品伊人久久久大香线蕉 | 国产精品人妖ts系列视频| 国模无码大尺度一区二区三区| 欧美剧情电影在线观看完整版免费励志电影 | 白白色亚洲国产精品| 国产亚洲欧美一区在线观看| 久久爱www久久做| 精品黑人一区二区三区久久| 免费成人在线网站| 欧美大片一区二区| 久久精品噜噜噜成人av农村| 91精品在线观看入口| 奇米精品一区二区三区在线观看 | 国内成人精品2018免费看| 欧美xxxxx裸体时装秀| 麻豆一区二区三区| 久久综合久久综合亚洲| 国产一区二区影院| 欧美国产成人精品| 91在线码无精品| 亚洲午夜久久久久久久久电影院| 欧美亚洲国产一区在线观看网站| 亚洲一区二区四区蜜桃| 欧美日韩国产免费一区二区 | 欧美午夜一区二区三区免费大片| 亚洲精品福利视频网站| 欧美精品乱码久久久久久按摩| 日本欧美一区二区三区乱码| 久久久久久久一区| 99re66热这里只有精品3直播 | 91美女片黄在线观看91美女| 亚洲日本一区二区三区| 欧美日韩国产综合一区二区三区 | 石原莉奈一区二区三区在线观看| 3atv在线一区二区三区| 精品一区二区国语对白| 日本一区二区视频在线| 色综合欧美在线| 奇米影视一区二区三区小说| 久久精品一区二区三区不卡牛牛 | 国产精品盗摄一区二区三区| 在线观看日韩一区|