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

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

?? mydipview.cpp

?? matlab圖像處理的基本例程
?? 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一区二区三区免费野_久草精品视频
欧美激情一区二区三区四区| av激情亚洲男人天堂| 国产精品进线69影院| 久久毛片高清国产| 日韩欧美色综合网站| 欧美三级日韩三级| 色美美综合视频| 色呦呦国产精品| 色综合激情久久| 99国产精品国产精品毛片| 成人app在线观看| 成人免费观看视频| 99久久久久免费精品国产| 97久久精品人人爽人人爽蜜臀| 国产精品一二一区| 国产精品99久久久久久久女警| 狠狠色丁香久久婷婷综合_中| 青青草国产精品97视觉盛宴| 蜜臀av在线播放一区二区三区| 蜜桃视频在线观看一区二区| 国产乱码精品1区2区3区| 成人黄色片在线观看| 91在线视频免费观看| 欧美日韩和欧美的一区二区| 欧美成人女星排名| 国产精品美女久久久久久久久久久| 亚洲色欲色欲www| 首页综合国产亚洲丝袜| 国产美女视频一区| 97精品久久久久中文字幕| 91福利视频久久久久| 欧美精品一级二级| 国产偷国产偷精品高清尤物| 国产精品家庭影院| 午夜精品爽啪视频| 国产精品77777| 99久久精品国产一区二区三区| 在线免费观看日本欧美| 欧美巨大另类极品videosbest | 日韩二区三区四区| 国产美女精品人人做人人爽| 91欧美激情一区二区三区成人| 欧美日韩精品二区第二页| 国产日本欧美一区二区| 丝袜脚交一区二区| av亚洲精华国产精华精| 日韩三级av在线播放| 成人免费在线视频| 国产在线精品国自产拍免费| 欧美中文字幕一区二区三区| 国产欧美一区二区精品久导航 | 国产精品国产成人国产三级| 亚洲电影欧美电影有声小说| 国产精品99久久久久久有的能看| 欧美亚洲自拍偷拍| 欧美成人官网二区| 亚洲少妇屁股交4| 国产激情视频一区二区在线观看| 欧美精品在线观看播放| 国产精品视频第一区| 久久国产尿小便嘘嘘| 欧美色图一区二区三区| 亚洲欧美日韩国产另类专区| 国产黄色91视频| 日韩免费高清av| 青娱乐精品在线视频| 欧美久久久久免费| 亚洲一区二区美女| 91视频一区二区| 久久综合九色综合欧美就去吻| 亚洲综合免费观看高清完整版 | 成人午夜又粗又硬又大| 欧美mv日韩mv亚洲| 日韩av电影一区| 欧洲色大大久久| 亚洲午夜激情av| 欧美视频一区在线观看| 亚洲精品高清在线观看| 欧美专区在线观看一区| 亚洲综合网站在线观看| 欧美另类z0zxhd电影| 亚洲成a人片在线观看中文| 欧美日韩激情一区| 麻豆高清免费国产一区| 日韩欧美在线网站| 国产永久精品大片wwwapp| 国产亚洲精品久| 成人av资源网站| 亚洲男人的天堂av| 欧美色综合影院| 蜜臀99久久精品久久久久久软件| 欧美一区二区在线播放| 久久精品国产精品亚洲综合| 精品粉嫩aⅴ一区二区三区四区| 亚洲一区在线视频| 日韩欧美综合在线| 国产成人免费xxxxxxxx| 久久久天堂av| 在线视频一区二区三| 日本不卡123| 国产午夜亚洲精品理论片色戒| 福利视频网站一区二区三区| 亚洲人成伊人成综合网小说| 欧美在线视频日韩| 久久精品国内一区二区三区| 精品国产乱子伦一区| 国产精品资源在线看| 国产精品久久久久久久久快鸭 | 欧美另类久久久品| 国产精品88av| 亚洲国产精品麻豆| 国产午夜亚洲精品午夜鲁丝片| 在线精品亚洲一区二区不卡| 免费人成在线不卡| 欧美精品一区男女天堂| 色视频成人在线观看免| 麻豆中文一区二区| 欧美mv和日韩mv的网站| 免费av成人在线| 国产蜜臀av在线一区二区三区| 国产乱码精品一区二区三区av| 一区二区在线电影| 久久九九99视频| 欧美久久久久久久久| www.综合网.com| 国内精品视频666| 亚洲精品欧美激情| 欧美人与禽zozo性伦| 波多野结衣中文字幕一区| 日本不卡在线视频| 中文字幕一区二区不卡| 日韩欧美国产综合一区| 欧美三级视频在线| 99久久国产免费看| 成人午夜av在线| 国产一区二区三区香蕉 | 日韩一区二区免费高清| 99re6这里只有精品视频在线观看| 美女一区二区久久| 日韩在线一区二区三区| 亚洲男帅同性gay1069| 亚洲欧洲在线观看av| 久久精品亚洲精品国产欧美 | 91视频国产观看| bt欧美亚洲午夜电影天堂| 国产精品77777| 国产揄拍国内精品对白| 激情深爱一区二区| 精品一区二区三区免费| 日韩电影一区二区三区四区| 亚洲激情一二三区| 亚洲主播在线观看| 亚洲一区二区免费视频| 午夜天堂影视香蕉久久| 午夜欧美电影在线观看| 亚洲电影欧美电影有声小说| 天天操天天色综合| 日韩国产欧美在线观看| 日韩不卡一区二区三区| 欧美aⅴ一区二区三区视频| 亚洲3atv精品一区二区三区| 亚洲第一福利一区| 亚洲mv在线观看| 亚洲大片在线观看| 一区二区三区不卡视频| 日韩精品一区第一页| 日韩av在线播放中文字幕| 看电影不卡的网站| 国产69精品久久99不卡| 91香蕉国产在线观看软件| 色嗨嗨av一区二区三区| 欧美年轻男男videosbes| 欧美电影免费提供在线观看| 久久久亚洲午夜电影| 亚洲欧美怡红院| 视频一区视频二区在线观看| 美腿丝袜亚洲色图| 成人网男人的天堂| 欧美性受xxxx| 久久奇米777| 亚洲日本护士毛茸茸| 丝袜诱惑制服诱惑色一区在线观看| 免播放器亚洲一区| 99久久综合色| 日韩一级片在线观看| 国产精品久久久久久亚洲伦| 亚洲成人在线观看视频| 国产精品一区二区不卡| 欧美视频完全免费看| 国产三级欧美三级日产三级99| 亚洲男人的天堂一区二区| 午夜精品国产更新| 成人av网站大全| 欧美人xxxx| 亚洲欧美日韩综合aⅴ视频| 欧美激情资源网| 日韩精品乱码av一区二区| 成人黄色一级视频| 欧美精品丝袜中出| 亚洲精品欧美在线|