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

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

?? mydipview.cpp

?? WINXP下VC編程實現圖像的縮放功能!
?? CPP
字號:
// MyDIPView.cpp : implementation of the CMyDIPView class
//

#include "stdafx.h"
#include "MyDIP.h"

#include "MyDIPDoc.h"
#include "MyDIPView.h"

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

/*************************************************************************
   該函數用來縮放DIB圖像,返回新生成DIB的句柄。
************************************************************************/

HGLOBAL WINAPI ZoomDIB(LPSTR lpDIB, float fXZoomRatio, float fYZoomRatio)
{
	
	// 源圖像的寬度和高度
	LONG	lWidth;
	LONG	lHeight;
	
	// 縮放后圖像的寬度和高度
	LONG	lNewWidth;
	LONG	lNewHeight;
	
	// 縮放后圖像的寬度(lNewWidth',必須是4的倍數)
	LONG	lNewLineBytes;
	
	// 指向源圖像的指針
	LPSTR	lpDIBBits;
	
	// 指向源象素的指針
	LPSTR	lpSrc;
	
	// 縮放后新DIB句柄
	HDIB	hDIB;
	
	// 指向縮放圖像對應象素的指針
	LPSTR	lpDst;
	
	// 指向縮放圖像的指針
	LPSTR	lpNewDIB;
	LPSTR	lpNewDIBBits;
	
	// 指向BITMAPINFO結構的指針(Win3.0)
	LPBITMAPINFOHEADER lpbmi;
	
	// 指向BITMAPCOREINFO結構的指針
	LPBITMAPCOREHEADER lpbmc;
	
	// 循環變量(象素在新DIB中的坐標)
	LONG	i;
	LONG	j;
	
	// 象素在源DIB中的坐標
	LONG	i0;
	LONG	j0;
	
	// 圖像每行的字節數
	LONG lLineBytes;
	
	// 找到源DIB圖像象素起始位置
	lpDIBBits = ::FindDIBBits(lpDIB);
	
	// 獲取圖像的寬度
	lWidth = ::DIBWidth(lpDIB);
	
	// 計算圖像每行的字節數
	lLineBytes = WIDTHBYTES(lWidth * 8);
	
	// 獲取圖像的高度
	lHeight = ::DIBHeight(lpDIB);
	
	// 計算縮放后的圖像實際寬度
	// 此處直接加0.5是由于強制類型轉換時不四舍五入,而是直接截去小數部分
	lNewWidth = (LONG) (::DIBWidth(lpDIB) * fXZoomRatio + 0.5);
	
	// 計算新圖像每行的字節數
	lNewLineBytes = WIDTHBYTES(lNewWidth * 8);
	
	// 計算縮放后的圖像高度
	lNewHeight = (LONG) (lHeight * fYZoomRatio + 0.5);
	
	// 分配內存,以保存新DIB
	hDIB = (HDIB) ::GlobalAlloc(GHND, lNewLineBytes * lNewHeight + *(LPDWORD)lpDIB + ::PaletteSize(lpDIB));
	
	// 判斷是否內存分配失敗
	if (hDIB == NULL)
	{
		// 分配內存失敗
		return NULL;
	}
	
	// 鎖定內存
	lpNewDIB =  (char * )::GlobalLock((HGLOBAL) hDIB);
	
	// 復制DIB信息頭和調色板
	memcpy(lpNewDIB, lpDIB, *(LPDWORD)lpDIB + ::PaletteSize(lpDIB));
	
	// 找到新DIB象素起始位置
	lpNewDIBBits = ::FindDIBBits(lpNewDIB);
	
	// 獲取指針
	lpbmi = (LPBITMAPINFOHEADER)lpNewDIB;
	lpbmc = (LPBITMAPCOREHEADER)lpNewDIB;
	
	// 更新DIB中圖像的高度和寬度
	if (IS_WIN30_DIB(lpNewDIB))
	{
		// 對于Windows 3.0 DIB
		lpbmi->biWidth = lNewWidth;
		lpbmi->biHeight = lNewHeight;
	}
	else
	{
		// 對于其它格式的DIB
		lpbmc->bcWidth = (unsigned short) lNewWidth;
		lpbmc->bcHeight = (unsigned short) lNewHeight;
	}
	
	// 針對圖像每行進行操作
	for(i = 0; i < lNewHeight; i++)
	{
		// 針對圖像每列進行操作
		for(j = 0; j < lNewWidth; j++)
		{
			
			// 指向新DIB第i行,第j個象素的指針
			// 注意此處寬度和高度是新DIB的寬度和高度
			lpDst = (char *)lpNewDIBBits + lNewLineBytes * (lNewHeight - 1 - i) + j;
			
			// 計算該象素在源DIB中的坐標
			i0 = (LONG) (i / fYZoomRatio + 0.5);
			j0 = (LONG) (j / fXZoomRatio + 0.5);
			
			// 判斷是否在源圖范圍內
			if( (j0 >= 0) && (j0 < lWidth) && (i0 >= 0) && (i0 < lHeight))
			{
				
				// 指向源DIB第i0行,第j0個象素的指針
				lpSrc = (char *)lpDIBBits + lLineBytes * (lHeight - 1 - i0) + j0;
				
				// 復制象素
				*lpDst = *lpSrc;
			}
			else
			{
				// 對于源圖中沒有的象素,直接賦值為255
				* ((unsigned char*)lpDst) = 255;
			}
			
		}
		
	}
	
	// 返回
	return hDIB;
}


/////////////////////////////////////////////////////////////////////////////
// CMyDIPView

IMPLEMENT_DYNCREATE(CMyDIPView, CScrollView)

BEGIN_MESSAGE_MAP(CMyDIPView, CScrollView)
	//{{AFX_MSG_MAP(CMyDIPView)
	ON_COMMAND(ID_MENUITEM32778, OnMenuitem32778)
	ON_COMMAND(ID_MENUITEM32779, OnMenuitem32779)
	//}}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()

/////////////////////////////////////////////////////////////////////////////
// CMyDIPView construction/destruction

CMyDIPView::CMyDIPView()
{
	// TODO: add construction code here

}

CMyDIPView::~CMyDIPView()
{
}

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

	return CScrollView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CMyDIPView drawing

void CMyDIPView::OnDraw(CDC* pDC)
{   
	CMyDIPDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	if(pDoc->m_hDIB == NULL)
		return ;
	// TODO: add draw code for native data here
	int i,j;
    unsigned char *lpSrc;
	LPSTR lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->m_hDIB);
	int cxDIB = (int) ::DIBWidth(lpDIB);         // Size of DIB - x
	int cyDIB = (int) ::DIBHeight(lpDIB);        // Size of DIB - y
	LPSTR lpDIBBits=::FindDIBBits (lpDIB);
	// 計算圖像每行的字節數
	long lLineBytes = WIDTHBYTES(cxDIB * 8);
	// 每行
	for(i = 0; i < cyDIB; i++)
	{
		// 每列
		for(j = 0; j < cxDIB; j++)
		{
			// 指向DIB第i行,第j個象素的指針
			lpSrc = (unsigned char*)lpDIBBits + lLineBytes * (cyDIB - 1 - i) + j;
			// 計算新的灰度值
			//*(lpSrc) = BYTE(255-*lpSrc);
		}
	}
	::GlobalUnlock((HGLOBAL) pDoc->m_hDIB);
	CRect rect(0,0,cxDIB,cyDIB), rcDIB(0,0,cxDIB,cyDIB);
	::PaintDIB(pDC->m_hDC, &rect, pDoc->m_hDIB, &rcDIB, pDoc->m_palDIB);
}

/////////////////////////////////////////////////////////////////////////////
// CMyDIPView printing

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

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

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

/////////////////////////////////////////////////////////////////////////////
// CMyDIPView diagnostics

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

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

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

/////////////////////////////////////////////////////////////////////////////
// CMyDIPView message handlers

void CMyDIPView::OnSize(UINT nType, int cx, int cy)
{
	CScrollView::OnSize(nType, cx, cy);
}

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

	SetScrollSizes(MM_TEXT, GetDocument()->m_sizeDoc);
}


//對比度拉伸
//DEL void CMyDIPView::OnMenuitem32777() 
//DEL {
//DEL 	
//DEL 	// 獲取文檔
//DEL 	CMyDIPDoc* pDoc = GetDocument();
//DEL 	int i,j;
//DEL 	int r1=60,r2=200;
//DEL 	double k=1.5;
//DEL     unsigned char *lpSrc;	
//DEL 	ASSERT_VALID(pDoc);
//DEL 	if(pDoc->m_hDIB == NULL)
//DEL 		return ;
//DEL 	LPSTR lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->m_hDIB);
//DEL 	LPSTR lpDIBBits=::FindDIBBits (lpDIB);
//DEL 	int cxDIB = (int) ::DIBWidth(lpDIB);         // Size of DIB - x
//DEL 	int cyDIB = (int) ::DIBHeight(lpDIB);        // Size of DIB - y
//DEL 	long lLineBytes = WIDTHBYTES(cxDIB * 8);     // 計算圖像每行的字節數
//DEL 	// 每行
//DEL 	for(i = 0; i < cyDIB; i++)
//DEL 	{
//DEL 		// 每列
//DEL 		for(j = 0; j < cxDIB; j++)
//DEL 		{
//DEL 			// 指向DIB第i行,第j個象素的指針
//DEL 			lpSrc = (unsigned char*)lpDIBBits + lLineBytes * (cyDIB - 1 - i) + j;
//DEL 			// 計算新的灰度值
//DEL 			if(*lpSrc<r1) *lpSrc=BYTE(*lpSrc/k);
//DEL 			else if(*lpSrc<r2) *lpSrc= BYTE((*lpSrc-r1)*k+r1/k);
//DEL 			else *lpSrc=BYTE((*lpSrc-r2)/k+255-(255-r2)/k);
//DEL 		}
//DEL 	}
//DEL 	::GlobalUnlock((HGLOBAL) pDoc->m_hDIB);
//DEL     Invalidate(TRUE);
//DEL }

void CMyDIPView::OnMenuitem32778() 
{
	// 圖像縮放

	// 獲取文檔
	CMyDIPDoc* pDoc = GetDocument();
	
	// 指向DIB的指針
	LPSTR lpDIB;
	
	// 鎖定DIB
	lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());
	
	// 判斷是否是8-bpp位圖(這里為了方便,只處理8-bpp位圖的縮放,其它的可以類推)
	if (::DIBNumColors(lpDIB) != 256)
	{
		// 提示用戶
		MessageBox("目前只支持256色位圖的縮放!", "系統提示" , MB_ICONINFORMATION | MB_OK);

		// 解除鎖定
		::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
		
		// 返回
		return;
	}
	
	// 縮放比率
	float fXZoomRatio;
	float fYZoomRatio;

	//縮放量
	fXZoomRatio = 0.8;
	fYZoomRatio = 0.8;

	
	// 創建新DIB
	HDIB hNewDIB = NULL;
	
	// 更改光標形狀
	BeginWaitCursor();
	
	// 調用ZoomDIB()函數轉置DIB
	hNewDIB = (HDIB) ZoomDIB(lpDIB, fXZoomRatio, fYZoomRatio);
	
	// 判斷縮放是否成功
	if (hNewDIB != NULL)
	{
		
		// 替換DIB,同時釋放舊DIB對象
		pDoc->ReplaceHDIB(hNewDIB);

		// 更新DIB大小和調色板
		pDoc->InitDIBData();
		
		// 設置臟標記
		pDoc->SetModifiedFlag(TRUE);
		
		// 重新設置滾動視圖大小
		SetScrollSizes(MM_TEXT, pDoc->GetDocSize());

		// 更新視圖
		pDoc->UpdateAllViews(NULL);
	}
	else
	{
		// 提示用戶
		MessageBox("分配內存失敗!", "系統提示" , MB_ICONINFORMATION | MB_OK);
	}
	
	// 解除鎖定
	::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());

	// 恢復光標
	EndWaitCursor();
	
}


void CMyDIPView::OnMenuitem32779() 
{
	// 圖像縮放

	// 獲取文檔
	CMyDIPDoc* pDoc = GetDocument();
	
	// 指向DIB的指針
	LPSTR lpDIB;
	
	// 鎖定DIB
	lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());
	
	// 判斷是否是8-bpp位圖(這里為了方便,只處理8-bpp位圖的縮放,其它的可以類推)
	if (::DIBNumColors(lpDIB) != 256)
	{
		// 提示用戶
		MessageBox("目前只支持256色位圖的縮放!", "系統提示" , MB_ICONINFORMATION | MB_OK);

		// 解除鎖定
		::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
		
		// 返回
		return;
	}
	
	// 縮放比率
	float fXZoomRatio;
	float fYZoomRatio;

	//縮放量
	fXZoomRatio = 1.25;
	fYZoomRatio = 1.25;

	
	// 創建新DIB
	HDIB hNewDIB = NULL;
	
	// 更改光標形狀
	BeginWaitCursor();
	
	// 調用ZoomDIB()函數轉置DIB
	hNewDIB = (HDIB) ZoomDIB(lpDIB, fXZoomRatio, fYZoomRatio);
	
	// 判斷縮放是否成功
	if (hNewDIB != NULL)
	{
		
		// 替換DIB,同時釋放舊DIB對象
		pDoc->ReplaceHDIB(hNewDIB);

		// 更新DIB大小和調色板
		pDoc->InitDIBData();
		
		// 設置臟標記
		pDoc->SetModifiedFlag(TRUE);
		
		// 重新設置滾動視圖大小
		SetScrollSizes(MM_TEXT, pDoc->GetDocSize());

		// 更新視圖
		pDoc->UpdateAllViews(NULL);
	}
	else
	{
		// 提示用戶
		MessageBox("分配內存失敗!", "系統提示" , MB_ICONINFORMATION | MB_OK);
	}
	
	// 解除鎖定
	::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());

	// 恢復光標
	EndWaitCursor();
	
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日本一区二区三区| 91丨国产丨九色丨pron| 欧美一区二区久久| 石原莉奈一区二区三区在线观看| 欧美日韩久久一区| 日韩av一区二| 欧美xxx久久| 国产盗摄视频一区二区三区| 国产精品视频一区二区三区不卡| 99久久er热在这里只有精品15| 亚洲欧美日韩精品久久久久| 欧美午夜精品久久久久久孕妇| 亚洲国产欧美日韩另类综合 | 97久久久精品综合88久久| 国产精品久久久久久户外露出| 色欧美片视频在线观看 | 欧美日韩五月天| 奇米一区二区三区av| 久久午夜色播影院免费高清| www.色精品| 亚洲动漫第一页| 久久综合狠狠综合| 在线观看一区二区视频| 首页综合国产亚洲丝袜| 久久在线免费观看| 99re亚洲国产精品| 蜜臀av性久久久久蜜臀aⅴ流畅| 久久一夜天堂av一区二区三区| 91小视频免费看| 秋霞影院一区二区| 国产精品国产a| 欧美一区二区成人| 99久久免费视频.com| 日韩精品成人一区二区在线| 国产午夜精品理论片a级大结局 | 日韩一区二区精品葵司在线| 国产一区二区0| 亚洲综合偷拍欧美一区色| 日韩免费一区二区三区在线播放| 国产999精品久久久久久绿帽| 亚洲成人免费视频| 欧美激情一区三区| 日韩午夜精品视频| 色综合欧美在线| 国产精品综合二区| 亚洲超碰精品一区二区| 国产精品拍天天在线| 91精品国产综合久久小美女| 91在线精品一区二区| 国产69精品久久777的优势| 一区二区三区电影在线播| 国产午夜亚洲精品理论片色戒| 欧美日韩极品在线观看一区| av电影一区二区| 看片网站欧美日韩| 午夜久久久久久久久| 18欧美亚洲精品| 久久综合九色综合欧美98 | 亚洲福利视频一区| 中文字幕一区二区三区四区| 久久婷婷成人综合色| 欧美一区二区三区在| 欧美日韩一区二区三区在线 | k8久久久一区二区三区| 美女免费视频一区| 日韩精品一级二级| 亚洲精品久久久蜜桃| 国产精品久久一级| 国产精品天干天干在观线| 久久精品视频网| 精品欧美一区二区在线观看| 91精选在线观看| 欧美日韩不卡一区二区| 欧美影院一区二区| 欧美午夜精品久久久| 在线视频国产一区| 欧美系列日韩一区| 欧美日韩免费在线视频| 欧美亚洲国产一区二区三区va| 91原创在线视频| 99精品视频在线免费观看| 97精品视频在线观看自产线路二| 丁香六月久久综合狠狠色| 高清视频一区二区| 成人免费黄色大片| 91蜜桃网址入口| 欧美性高清videossexo| 欧美国产精品中文字幕| 日本精品视频一区二区| 在线观看一区日韩| 欧美日韩国产不卡| 5858s免费视频成人| 精品久久国产97色综合| 欧美精品一区在线观看| 欧美国产精品中文字幕| 亚洲天堂福利av| 亚洲午夜电影在线观看| 午夜精品一区二区三区电影天堂| 日韩av一级电影| 国产在线一区二区| 成人美女在线视频| 精品视频一区 二区 三区| 欧美一级黄色片| 久久一区二区三区国产精品| 国产精品久久久久影院老司| 亚洲精品乱码久久久久久久久| 亚洲午夜私人影院| 热久久国产精品| 国产乱理伦片在线观看夜一区| 97精品国产露脸对白| 777奇米四色成人影色区| 精品久久久久久综合日本欧美| 国产精品久久久久永久免费观看| 亚洲国产欧美在线| 国产伦精品一区二区三区在线观看| 成人国产视频在线观看| 在线观看一区二区精品视频| 日韩欧美国产麻豆| 中文字幕亚洲精品在线观看| 五月婷婷色综合| 国产一区二区中文字幕| 色婷婷综合激情| 精品久久久三级丝袜| 亚洲制服丝袜在线| 国产麻豆视频一区| 欧美日韩国产不卡| 日本一区二区三区视频视频| 天天色综合成人网| 99久久免费视频.com| 精品三级av在线| 亚洲精品ww久久久久久p站 | 免费一级欧美片在线观看| 国产99精品国产| 制服丝袜在线91| 亚洲欧美偷拍另类a∨色屁股| 麻豆高清免费国产一区| 91福利国产精品| 国产亚洲精品bt天堂精选| 五月天激情小说综合| av一区二区不卡| 久久麻豆一区二区| 美女在线视频一区| 欧美日本一道本在线视频| 亚洲色图在线播放| 国产在线精品一区在线观看麻豆| 91官网在线免费观看| 国产无遮挡一区二区三区毛片日本| 日韩激情中文字幕| 日本黄色一区二区| **网站欧美大片在线观看| 国内久久精品视频| 日韩视频123| 亚洲国产中文字幕在线视频综合| caoporm超碰国产精品| 久久新电视剧免费观看| 美女mm1313爽爽久久久蜜臀| 3d动漫精品啪啪一区二区竹菊 | 麻豆精品久久精品色综合| 在线看日韩精品电影| 国产精品欧美一区二区三区| 国产一区二区三区免费播放| 欧美电视剧免费观看| 亚洲电影在线播放| 欧美日韩国产bt| 亚洲成a人v欧美综合天堂| 日本韩国欧美一区| 一区二区三区在线观看网站| 99久久国产综合精品女不卡| 日韩一区有码在线| 99久免费精品视频在线观看| 亚洲国产高清aⅴ视频| 国产99精品在线观看| 国产清纯白嫩初高生在线观看91 | 波多野结衣中文一区| 中文字幕不卡在线播放| 成人丝袜视频网| 中文字幕成人av| av电影天堂一区二区在线| 一区二区中文视频| 91猫先生在线| 樱花影视一区二区| 欧美日韩不卡一区二区| 美腿丝袜亚洲三区| 久久精品在线免费观看| 不卡免费追剧大全电视剧网站| 亚洲视频精选在线| 欧美揉bbbbb揉bbbbb| 蜜桃视频一区二区三区在线观看| 欧美不卡一区二区| 成人激情免费视频| 亚洲免费高清视频在线| 在线播放一区二区三区| 国产在线精品免费| 亚洲欧美乱综合| 6080国产精品一区二区| 国产露脸91国语对白| 亚洲乱码中文字幕综合| 51精品国自产在线| 高清视频一区二区| 亚洲图片欧美一区|