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

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

?? bmpviewerdoc.cpp

?? 本代碼實現對BMP格式文件的讀取
?? CPP
字號:
// BMPViewerDoc.cpp : implementation of the CBMPViewerDoc class
//

#include "stdafx.h"
#include "BMPViewer.h"

#include "BMPViewerDoc.h"

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

/////////////////////////////////////////////////////////////////////////////
// CBMPViewerDoc

IMPLEMENT_DYNCREATE(CBMPViewerDoc, CDocument)

BEGIN_MESSAGE_MAP(CBMPViewerDoc, CDocument)
	//{{AFX_MSG_MAP(CBMPViewerDoc)
	ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
	ON_COMMAND(ID_Zoomin, OnZoomin)
	ON_COMMAND(ID_Zoomout, OnZoomout)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CBMPViewerDoc construction/destruction

CBMPViewerDoc::CBMPViewerDoc()
{
	// TODO: add one-time construction code here
	
}

CBMPViewerDoc::~CBMPViewerDoc()
{
	if (flag==1) {
		//釋放內存資源
		HeapFree(GetProcessHeap(),0,pbi);
		HeapFree(GetProcessHeap(),0,lpBuf);
	}
}

BOOL CBMPViewerDoc::OnNewDocument()
{
	if (!CDocument::OnNewDocument())
		return FALSE;

	// TODO: add reinitialization code here
	// (SDI documents will reuse this document)

	return TRUE;
}



/////////////////////////////////////////////////////////////////////////////
// CBMPViewerDoc serialization

void CBMPViewerDoc::Serialize(CArchive& ar)
{
	if (ar.IsStoring())
	{
		// TODO: add storing code here
	}
	else
	{
		// TODO: add loading code here
	}
}

/////////////////////////////////////////////////////////////////////////////
// CBMPViewerDoc diagnostics

#ifdef _DEBUG
void CBMPViewerDoc::AssertValid() const
{
	CDocument::AssertValid();
}

void CBMPViewerDoc::Dump(CDumpContext& dc) const
{
	CDocument::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CBMPViewerDoc commands

BOOL CBMPViewerDoc::PrepareShowdata()
{
	BYTE** image;
	BYTE** originimage;
	int i,j;
	int linewidth;

	if(lpshowbuf!=NULL)
		HeapFree(GetProcessHeap(),0,lpshowbuf);
	if(zoomfactor>=1)
	{//放大
		pbi->bmiHeader.biHeight=bi.biHeight*zoomfactor;
		pbi->bmiHeader.biWidth=bi.biWidth*zoomfactor;
	
		//每行四字節補齊,計算每行字節數:
		linewidth=(pbi->bmiHeader.biWidth*pbi->bmiHeader.biBitCount+31)/32*4;
		
		//計算顯示圖像所需內存大小
		pbi->bmiHeader.biSizeImage=linewidth*pbi->bmiHeader.biHeight;
		
		//申請內存
		lpshowbuf=(BYTE*)HeapAlloc(GetProcessHeap(),0,pbi->bmiHeader.biSizeImage);
		
		//生成對lpshowbuf的二維數組索引:
		image=new BYTE*[pbi->bmiHeader.biHeight];
		for(i=0;i<pbi->bmiHeader.biHeight;i++)
			image[i]=lpshowbuf+i*linewidth;
		
		originimage=new BYTE*[bi.biHeight];
		for(i=0;i<bi.biHeight;i++)
			originimage[i]=lpBuf+i*bi.biSizeImage/bi.biHeight;

		//賦值
		if(bi.biBitCount<24)
		{
			for(i=0;i<pbi->bmiHeader.biHeight;i++)
			 for(j=0;j<linewidth;j++)
			  image[i][j]=originimage[i/zoomfactor][j/zoomfactor];
		}
		else if(bi.biBitCount==24)
		{//24位真彩色
			for(i=0;i<pbi->bmiHeader.biHeight;i++)
			 for(j=0;j<pbi->bmiHeader.biWidth;j++)
			 {
				image[i][j*3]=originimage[i/zoomfactor][(j/zoomfactor)*3];
				image[i][j*3+1]=originimage[i/zoomfactor][(j/zoomfactor)*3+1];
				image[i][j*3+2]=originimage[i/zoomfactor][(j/zoomfactor)*3+2];
			 }
		}
		else
		{//32位色
			for(i=0;i<pbi->bmiHeader.biHeight;i++)
			 for(j=0;j<pbi->bmiHeader.biWidth;j++)
			 {
				image[i][j*4]=originimage[i/zoomfactor][(j/zoomfactor)*4];
				image[i][j*4+1]=originimage[i/zoomfactor][(j/zoomfactor)*4+1];
				image[i][j*4+2]=originimage[i/zoomfactor][(j/zoomfactor)*4+2];
 				image[i][j*4+3]=originimage[i/zoomfactor][(j/zoomfactor)*4+3];
			 }
		}
	}
	else
	{//縮小
		pbi->bmiHeader.biHeight=bi.biHeight/(-zoomfactor);
		pbi->bmiHeader.biWidth=bi.biWidth/(-zoomfactor);
	
		//每行四字節補齊,計算每行字節數:
		linewidth=(pbi->bmiHeader.biWidth*pbi->bmiHeader.biBitCount+31)/32*4;
		
		//計算顯示圖像所需內存大小
		pbi->bmiHeader.biSizeImage=linewidth*pbi->bmiHeader.biHeight;
		
		//申請內存
		lpshowbuf=(BYTE*)HeapAlloc(GetProcessHeap(),0,pbi->bmiHeader.biSizeImage);
		
		//生成對lpshowbuf的二維數組索引:
		image=new BYTE*[pbi->bmiHeader.biHeight];
		for(i=0;i<pbi->bmiHeader.biHeight;i++)
			image[i]=lpshowbuf+i*linewidth;
		
		originimage=new BYTE*[bi.biHeight];
		for(i=0;i<bi.biHeight;i++)
			originimage[i]=lpBuf+i*bi.biSizeImage/bi.biHeight;

		//賦值
		if(bi.biBitCount<24)
		{
			for(i=0;i<pbi->bmiHeader.biHeight;i++)
			 for(j=0;j<linewidth;j++)
			  image[i][j]=originimage[i*(-zoomfactor)][j*(-zoomfactor)];
		}
		else if(bi.biBitCount==24)
		{//24位真彩色
			for(i=0;i<pbi->bmiHeader.biHeight;i++)
			 for(j=0;j<pbi->bmiHeader.biWidth;j++)
			 {
				image[i][j*3]=originimage[i*(-zoomfactor)][(j*(-zoomfactor))*3];
				image[i][j*3+1]=originimage[i*(-zoomfactor)][(j*(-zoomfactor))*3+1];
				image[i][j*3+2]=originimage[i*(-zoomfactor)][(j*(-zoomfactor))*3+2];
			 }
		}
		else
		{//32位色
			for(i=0;i<pbi->bmiHeader.biHeight;i++)
			 for(j=0;j<pbi->bmiHeader.biWidth;j++)
			 {
				image[i][j*4]=originimage[i*(-zoomfactor)][(j*(-zoomfactor))*4];
				image[i][j*4+1]=originimage[i*(-zoomfactor)][(j*(-zoomfactor))*4+1];
				image[i][j*4+2]=originimage[i*(-zoomfactor)][(j*(-zoomfactor))*4+2];
				image[i][j*4+3]=originimage[i*(-zoomfactor)][(j*(-zoomfactor))*4+3];
			 }
		}
	}

	return TRUE;
}

void CBMPViewerDoc::OnFileOpen() 
{
	// TODO: Add your command handler code here
	LPCTSTR lpszFilter="BMP Files(*.bmp)|*.bmp|任何文件|*.*||";
	CFileDialog dlg(TRUE,lpszFilter,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,lpszFilter,NULL);
	CString filename;
	CFile file;
	BITMAPFILEHEADER bf;

	//打開文件對話框
	if(dlg.DoModal()==IDOK)
	{
		filename=dlg.GetPathName();
	    if(file.Open(filename,CFile::modeRead|CFile::shareDenyNone,NULL)==0)
		{	
			//讀取文件失敗
			AfxMessageBox("無法打開文件!",MB_OK,0);
			return;
		}
		//讀取文件頭
		file.Read(&bf,sizeof(bf));
		//判斷是否是BMP文件
		if(bf.bfType!=0x4d42)//'BM'
		{
			AfxMessageBox("非BMP文件!",MB_OK,0);
			return;
		}
		//判斷文件是否損壞
		if(file.GetLength()!=bf.bfSize)
		{
			AfxMessageBox("文件已損壞,請檢查!",MB_OK,0);
			return;
		}

		//讀文件信息頭
		file.Read(&bi,sizeof(bi));
					
		//計算調色板數目
		numQuad=0;
		if(bi.biBitCount<24)
		{
			numQuad=1<<bi.biBitCount;
		}
		
		//為圖像信息pbi申請空間
		pbi=(BITMAPINFO*)HeapAlloc(GetProcessHeap(),0,sizeof(BITMAPINFOHEADER)+numQuad*sizeof(RGBQUAD));
		memcpy(pbi,&bi,sizeof(bi));
		quad=(RGBQUAD*)((BYTE*)pbi+sizeof(BITMAPINFOHEADER));
		
		//讀取調色板
		if(numQuad!=0)
		{
			file.Read(quad,sizeof(RGBQUAD)*numQuad);
		}
		
		//為圖像數據申請空間
		bi.biSizeImage=bf.bfSize-bf.bfOffBits;
		lpBuf=(BYTE*)HeapAlloc(GetProcessHeap(),0,bi.biSizeImage);
		//讀取圖像數據
		file.Read(lpBuf,bi.biSizeImage);
		
		//圖像讀取完畢,關閉文件,設置標志
		file.Close();
		flag=1;
		zoomfactor=1;
		lpshowbuf=NULL;
		PrepareShowdata();
		UpdateAllViews(NULL,0,NULL);
	}
}


void CBMPViewerDoc::OnZoomin() 
{
	// TODO: Add your command handler code here
	// 縮小倍數不超過2
	if(zoomfactor>1||zoomfactor<-1)
		zoomfactor--;
	else if(zoomfactor=1)
		zoomfactor=-2;
	PrepareShowdata();
	UpdateAllViews(NULL,0,NULL);
}

void CBMPViewerDoc::OnZoomout() 
{
	// TODO: Add your command handler code here
	// 放大倍數超過2次還原
	if(zoomfactor>=1||zoomfactor<-2)
		zoomfactor++;
	else if(zoomfactor=-2)
		zoomfactor=1;
	PrepareShowdata();
	UpdateAllViews(NULL,0,NULL);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
www.亚洲色图| 精品免费一区二区三区| 日韩欧美高清在线| 中文字幕在线观看一区二区| 日本不卡免费在线视频| 97se亚洲国产综合自在线| 欧美一区二区三区啪啪| 综合欧美亚洲日本| 国产乱子伦视频一区二区三区 | 精品国产露脸精彩对白| 亚洲靠逼com| 国产91丝袜在线观看| 欧美一区二区不卡视频| 亚洲色图欧美偷拍| 国产成人日日夜夜| 精品国产欧美一区二区| 五月天激情综合| 欧美视频一区二区| 91麻豆精品国产| 国产日韩欧美一区二区三区乱码 | 色婷婷综合久久久久中文一区二区| 欧美成人精品二区三区99精品| 亚洲日本青草视频在线怡红院| 国产精品综合视频| 精品国产亚洲一区二区三区在线观看 | 91福利精品第一导航| 国产区在线观看成人精品| 国产一区二区精品久久91| 日韩精品一区二区三区视频| 亚洲成人1区2区| 欧美日韩国产成人在线免费| 亚洲综合小说图片| 色视频欧美一区二区三区| 亚洲视频在线一区| 99精品在线观看视频| 中文字幕亚洲区| 色婷婷亚洲综合| 一个色在线综合| 欧美视频一区在线观看| 视频一区二区三区入口| 欧美一区二区网站| 激情六月婷婷综合| 国产欧美日本一区视频| av成人免费在线| 亚洲人成人一区二区在线观看 | 亚洲成人激情综合网| 7777精品伊人久久久大香线蕉的| 亚洲主播在线播放| 欧美二区三区的天堂| 午夜精品福利一区二区蜜股av| 欧美日产在线观看| 精彩视频一区二区| 国产精品狼人久久影院观看方式| 色婷婷久久综合| 日韩精品福利网| 精品国产免费人成在线观看| 国产成人精品免费一区二区| 日韩美女啊v在线免费观看| 欧美视频一二三区| 国产一区二区三区不卡在线观看 | 国内久久精品视频| 国产精品日产欧美久久久久| 欧美在线免费观看亚洲| 免费观看久久久4p| 国产视频视频一区| 欧美影院一区二区| 国产麻豆91精品| 一区二区三区不卡视频在线观看| 91精品国产入口| 99久久伊人精品| 日韩国产精品久久久| 国产日韩欧美高清| 欧美午夜影院一区| 国产美女一区二区三区| 亚洲乱码精品一二三四区日韩在线| 欧美精品久久一区二区三区| 国产成人精品aa毛片| 亚洲成人精品一区二区| 国产精品丝袜在线| 欧美一区二区三区在线| 99re热视频这里只精品| 久草在线在线精品观看| 亚洲综合精品自拍| 国产日韩欧美麻豆| 日韩欧美在线不卡| 欧洲另类一二三四区| 国产成人高清在线| 男男视频亚洲欧美| 一区二区三区 在线观看视频| 久久精品欧美日韩精品 | 国产精品18久久久| 日韩电影在线观看网站| 亚洲男同1069视频| 久久九九久精品国产免费直播| 欧美日韩国产精选| 一本大道av一区二区在线播放| 加勒比av一区二区| 欧美aaa在线| 石原莉奈在线亚洲三区| 一区二区三区欧美久久| 国产日韩精品久久久| 欧美成人精品1314www| 在线看不卡av| 91网上在线视频| 成人a免费在线看| 国产成人精品亚洲777人妖 | 99久久婷婷国产综合精品电影| 精品一区二区免费在线观看| 亚洲chinese男男1069| 亚洲激情第一区| 亚洲美女电影在线| 亚洲色图制服诱惑 | 91精品国产高清一区二区三区蜜臀| 欧美亚洲另类激情小说| 91免费视频观看| 91在线视频免费91| 91社区在线播放| 欧美在线free| 欧美日韩精品二区第二页| 精品视频一区二区三区免费| 欧美性三三影院| 欧美羞羞免费网站| 在线综合视频播放| 日韩三级在线观看| 精品国产露脸精彩对白| 欧美经典三级视频一区二区三区| 国产婷婷色一区二区三区| 国产精品另类一区| 亚洲男女毛片无遮挡| 亚洲伊人伊色伊影伊综合网| 亚洲一区二区三区自拍| 日韩成人免费在线| 黄页视频在线91| 成人精品一区二区三区四区| av亚洲精华国产精华精| 色哟哟精品一区| 欧美一区二区免费视频| 国产亚洲欧美一区在线观看| 国产精品护士白丝一区av| 亚洲精品乱码久久久久久黑人| 亚洲大片在线观看| 国产一区二区三区综合| av中文字幕不卡| 欧美日韩综合一区| 精品国产3级a| 最新热久久免费视频| 亚洲成人免费观看| 国产凹凸在线观看一区二区| 91丨porny丨国产| 欧美精品一级二级三级| 国产午夜三级一区二区三| 夜夜嗨av一区二区三区中文字幕| 蜜桃视频在线观看一区| 国产精品18久久久久久久网站| 成人久久久精品乱码一区二区三区| 欧洲一区二区三区在线| 久久久午夜精品理论片中文字幕| 专区另类欧美日韩| 麻豆精品一区二区三区| 99久久精品一区| 精品国产91亚洲一区二区三区婷婷| 国产精品久久久久久久久快鸭| 性久久久久久久| 成人精品国产一区二区4080| 欧美疯狂性受xxxxx喷水图片| 国产精品久久久久aaaa| 裸体歌舞表演一区二区| 91香蕉视频mp4| 久久色视频免费观看| 五月婷婷综合激情| 99精品视频中文字幕| 欧美成人一区二区三区在线观看| 亚洲欧美视频在线观看视频| 国产精品一区三区| 欧美肥妇free| 一区二区三区**美女毛片| 欧亚洲嫩模精品一区三区| 国产亚洲成aⅴ人片在线观看| 欧美日韩五月天| 久久久久久久久久久电影| 亚洲va韩国va欧美va| 99久久国产综合色|国产精品| 精品少妇一区二区三区在线视频 | 91高清在线观看| 国产精品伦理一区二区| 韩国成人福利片在线播放| 7777精品伊人久久久大香线蕉完整版 | 日本v片在线高清不卡在线观看| 99国产精品视频免费观看| 国产欧美一区二区三区鸳鸯浴| 久久国产精品无码网站| 欧美日韩国产高清一区二区| 亚洲美腿欧美偷拍| 91丨porny丨在线| ...xxx性欧美| 色哟哟一区二区| 亚洲一区精品在线| 在线视频国内自拍亚洲视频| 一区二区三区精品视频| 在线一区二区三区|