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

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

?? dibimage.cpp

?? 經典編著《Visual C++數字圖像處理典型算法及實現》光盤源程序。
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
{	
	LPBITMAPINFOHEADER lpbmi;	// 指向BITMAPINFO結構的指針(Win3.0)
	LPBITMAPCOREHEADER lpbmc;	// 指向BITMAPCOREINFO結構的指針
	lpbmi = (LPBITMAPINFOHEADER)lpDIB;
	lpbmc = (LPBITMAPCOREHEADER)lpDIB;

	// 返回DIB中圖像的寬度
	if (IS_WIN30_DIB(lpDIB))
	{		
		return lpbmi->biHeight;		// 對于Windows 3.0 DIB,返回lpbmi->biHeight
	}
	else
	{		
		return (DWORD)lpbmc->bcHeight;	// 對于其它格式的DIB,返回lpbmc->bcHeight
	}
}

/*************************************************************************
 * 函數名稱:
 *   PaletteSize()
 * 參數:
 *   LPSTR lpbi         - 指向DIB對象的指針
 * 返回值:
 *   WORD               - DIB中調色板的大小
 * 說明:
 *   該函數返回DIB中調色板的大小。對于Windows 3.0 DIB,返回顏色數目×
 * RGBQUAD的大??;對于其它返回顏色數目×RGBTRIPLE的大小。
 ************************************************************************/
WORD CDibImage::PaletteSize(LPSTR lpbi)
{
	// 計算DIB中調色板的大小
	if (IS_WIN30_DIB (lpbi))
	{
		//返回顏色數目×RGBQUAD的大小
		return (WORD)(DIBNumColors(lpbi) * sizeof(RGBQUAD));
	}
	else
	{
		//返回顏色數目×RGBTRIPLE的大小
		return (WORD)(DIBNumColors(lpbi) * sizeof(RGBTRIPLE));
	}
}

/*************************************************************************
 * 函數名稱:
 *   DIBNumColors()
 * 參數:
 *   LPSTR lpbi         - 指向DIB對象的指針
 * 返回值:
 *   WORD               - 返回調色板中顏色的種數
 * 說明:
 *   該函數返回DIB中調色板的顏色的種數。對于單色位圖,返回2,
 * 對于16色位圖,返回16,對于256色位圖,返回256;對于真彩色
 * 位圖(24位),沒有調色板,返回0。
 ************************************************************************/
WORD CDibImage::DIBNumColors(LPSTR lpbi)
{
	WORD wBitCount;

	// 對于Windows的DIB, 實際顏色的數目可以比象素的位數要少。
	// 對于這種情況,則返回一個近似的數值。
	
	// 判斷是否是WIN3.0 DIB
	if (IS_WIN30_DIB(lpbi))
	{
		DWORD dwClrUsed;
		dwClrUsed = ((LPBITMAPINFOHEADER)lpbi)->biClrUsed;	// 讀取dwClrUsed值
		
		if (dwClrUsed != 0)
		{
			// 如果dwClrUsed(實際用到的顏色數)不為0,直接返回該值
			return (WORD)dwClrUsed;
		}
	}

	// 讀取象素的位數
	if (IS_WIN30_DIB(lpbi))
	{		
		wBitCount = ((LPBITMAPINFOHEADER)lpbi)->biBitCount;	// 讀取biBitCount值
	}
	else
	{		
		wBitCount = ((LPBITMAPCOREHEADER)lpbi)->bcBitCount;	// 讀取biBitCount值
	}
	
	// 按照象素的位數計算顏色數目
	switch (wBitCount)
	{
		case 1:
			return 2;
			break;
		case 4:
			return 16;
			break;
		case 8:
			return 256;
			break;
		default:
			return 0;
			break;
	}
}

/*************************************************************************
 * 函數名稱:
 *   CopyHandle()
 * 參數:
 *   HGLOBAL h          - 要復制的內存區域
 * 返回值:
 *   HGLOBAL            - 復制后的新內存區域
 * 說明:
 *   該函數復制指定的內存區域。返回復制后的新內存區域,出錯時返回0。
 ************************************************************************/
HGLOBAL CDibImage::CopyHandle (HGLOBAL h)
{
	if (h == NULL)
	{
		return NULL;
	}
	
	DWORD dwLen = ::GlobalSize((HGLOBAL) h);	// 獲取指定內存區域大小
	HGLOBAL hCopy = ::GlobalAlloc(GHND, dwLen);	// 分配新內存空間	
	if (hCopy != NULL)							// 判斷分配是否成功
	{
		void* lpCopy = ::GlobalLock((HGLOBAL) hCopy);
		void* lp     = ::GlobalLock((HGLOBAL) h);
		
		memcpy(lpCopy, lp, dwLen);
		
		::GlobalUnlock(hCopy);
		::GlobalUnlock(h);
	}

	return hCopy;
}

/*************************************************************************
 * 函數名稱:
 *   SaveDIB()
 * 參數:
 *   HDIB hDib          - 要保存的DIB
 *   CFile& file        - 保存文件CFile
 * 返回值:
 *   BOOL               - 成功返回TRUE,否則返回FALSE或者CFileException
 * 說明:
 *   該函數將指定的DIB對象保存到指定的CFile中。該CFile由調用程序打開和關閉。
 *************************************************************************/
BOOL CDibImage::SaveDIB(HDIB hDib, CFile& file)
{	
	BITMAPFILEHEADER bmfHdr;	// Bitmap文件頭	
	LPBITMAPINFOHEADER lpBI;	// 指向BITMAPINFOHEADER的指針
	DWORD dwDIBSize;			// DIB大小

	if (hDib == NULL)
	{
		return FALSE;
	}

	// 讀取BITMAPINFO結構,并鎖定
	lpBI = (LPBITMAPINFOHEADER) ::GlobalLock((HGLOBAL) hDib);	
	if (lpBI == NULL)
	{
		return FALSE;
	}
	
	// 判斷是否是WIN3.0 DIB
	if (!IS_WIN30_DIB(lpBI))
	{
		// 不支持其它類型的DIB保存
		::GlobalUnlock((HGLOBAL) hDib);
		return FALSE;
	}

	////////////////////////////////////////////////////////////////////////
	// 填充文件頭///////////////////////////////////////////////////////////	
	bmfHdr.bfType = DIB_HEADER_MARKER;		// 文件類型"BM"

	// 計算DIB大小時,最簡單的方法是調用GlobalSize()函數。但是全局內存大小并
	// 不是DIB真正的大小,它總是多幾個字節。這樣就需要計算一下DIB的真實大小。
	
	// 文件頭大?。伾泶笮?	// (BITMAPINFOHEADER和BITMAPCOREHEADER結構的第一個DWORD都是該結構的大?。?	dwDIBSize = *(LPDWORD)lpBI + PaletteSize((LPSTR)lpBI);
	
	// 計算圖像大小
	if ((lpBI->biCompression == BI_RLE8) || (lpBI->biCompression == BI_RLE4))
	{
		// 對于RLE位圖,沒法計算大小,只能信任biSizeImage內的值
		dwDIBSize += lpBI->biSizeImage;
	}
	else
	{		
		DWORD dwBmBitsSize;			// 象素的大小
		dwBmBitsSize = WIDTHBYTES((lpBI->biWidth)*((DWORD)lpBI->biBitCount)) 
			* lpBI->biHeight;		// 大小為Width * Height
		dwDIBSize += dwBmBitsSize;	// 計算出DIB真正的大小

		// 更新biSizeImage(很多BMP文件頭中biSizeImage的值是錯誤的)
		lpBI->biSizeImage = dwBmBitsSize;
	}

	// 計算文件大?。篋IB大小+BITMAPFILEHEADER結構大小
	bmfHdr.bfSize = dwDIBSize + sizeof(BITMAPFILEHEADER);
	
	// 兩個保留字
	bmfHdr.bfReserved1 = 0;
	bmfHdr.bfReserved2 = 0;

	// 計算偏移量bfOffBits,它的大小為Bitmap文件頭大?。獶IB頭大?。伾泶笮?	bmfHdr.bfOffBits = (DWORD)sizeof(BITMAPFILEHEADER) + lpBI->biSize
											  + PaletteSize((LPSTR)lpBI);

	/////////////////////////////////////////////////////////////////////////
	// 嘗試寫文件////////////////////////////////////////////////////////////
	TRY
	{		
		file.Write((LPSTR)&bmfHdr, sizeof(BITMAPFILEHEADER));	// 寫文件頭
		file.WriteHuge(lpBI, dwDIBSize);					// 寫DIB頭和象素
	}
	CATCH (CFileException, e)
	{
		::GlobalUnlock((HGLOBAL) hDib);
		THROW_LAST();
	}
	END_CATCH
	
	::GlobalUnlock((HGLOBAL) hDib);
	return TRUE;
}

/*************************************************************************
 * 函數名稱:
 *   ReadDIBFile()
 * 參數:
 *   CFile& file        - 要讀取得文件文件CFile
 * 返回值:
 *   HDIB               - 成功返回DIB的句柄,否則返回NULL。
 * 說明:
 *   該函數將指定的文件中的DIB對象讀到指定的內存區域中。除BITMAPFILEHEADER
 * 外的內容都將被讀入內存。
 *************************************************************************/
HDIB CDibImage::ReadDIBFile(CFile& file)
{
	BITMAPFILEHEADER bmfHeader;
	HDIB hDIB;
	LPSTR pDIB;
	DWORD dwBitsSize;

	dwBitsSize = file.GetLength();		// 獲取DIB(文件)長度(字節)

	// 嘗試讀取DIB文件頭
	if (file.Read((LPSTR)&bmfHeader, sizeof(bmfHeader)) != sizeof(bmfHeader))
	{
		return NULL;
	}
	// 判斷是否是DIB對象,檢查頭兩個字節是否是"BM"
	if (bmfHeader.bfType != DIB_HEADER_MARKER)
	{
		return NULL;
	}
	// 為DIB分配內存
	hDIB = (HDIB) ::GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT, dwBitsSize);
	if (hDIB == 0)
	{
		return NULL;
	}
	
	pDIB = (LPSTR) ::GlobalLock((HGLOBAL) hDIB);
	if (file.ReadHuge(pDIB, dwBitsSize - sizeof(BITMAPFILEHEADER)) !=
		dwBitsSize - sizeof(BITMAPFILEHEADER) )		// 讀象素
	{
		::GlobalUnlock((HGLOBAL) hDIB);
		::GlobalFree((HGLOBAL) hDIB);
		return NULL;
	}

	::GlobalUnlock((HGLOBAL) hDIB);
	return hDIB;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久99精品久久久久久久久久久久 | 在线观看日韩国产| 老司机精品视频在线| 婷婷丁香久久五月婷婷| 五月天视频一区| 蜜臀久久99精品久久久久久9 | 国产风韵犹存在线视精品| 国产精品一区二区果冻传媒| 国产精品1区二区.| 国产**成人网毛片九色| 高清不卡在线观看| 色狠狠av一区二区三区| 欧美影院一区二区| 日韩一区二区电影在线| 337p日本欧洲亚洲大胆精品| 国产亲近乱来精品视频| 亚洲人吸女人奶水| 婷婷丁香激情综合| 国产在线精品免费av| 成人app下载| 在线免费精品视频| 日韩精品在线看片z| 国产欧美视频一区二区| 《视频一区视频二区| 亚洲精品视频在线观看免费| 偷窥国产亚洲免费视频| 久久精品噜噜噜成人av农村| 国产盗摄一区二区三区| 99久久婷婷国产| 欧美一区二区人人喊爽| 国产午夜精品一区二区| 亚洲国产精品一区二区久久恐怖片| 天堂精品中文字幕在线| 成人免费视频一区| 777色狠狠一区二区三区| 久久久不卡影院| 亚洲午夜久久久| 国产成人午夜片在线观看高清观看| 91啦中文在线观看| 精品国产乱码久久久久久久 | 欧美一区二区三区的| 国产精品你懂的| 久久精品国产一区二区三区免费看| 成人av第一页| 欧美成人综合网站| 亚洲免费观看高清完整| 国产一区二区三区日韩| 欧美熟乱第一页| 中文字幕欧美一区| 极品少妇xxxx偷拍精品少妇| 97超碰欧美中文字幕| 精品国产凹凸成av人导航| 亚洲综合免费观看高清完整版| 久久精品av麻豆的观看方式| 91成人国产精品| 国产精品久久久久影视| 国产精品一区专区| 日韩欧美在线一区二区三区| 亚洲一二三四在线观看| 99九九99九九九视频精品| 国产婷婷色一区二区三区| 免费观看一级欧美片| 欧美日韩一本到| 一区二区在线观看不卡| 99久久婷婷国产| 中文字幕一区二区三中文字幕| 国产原创一区二区| 精品久久人人做人人爱| 久久99在线观看| 日韩欧美国产不卡| 美女一区二区在线观看| 欧美一区二区在线不卡| 日韩精品1区2区3区| 欧美日韩精品一区视频| 一区二区免费在线| 在线视频国产一区| 亚洲一区免费观看| 在线成人小视频| 热久久一区二区| 2023国产精品视频| 国内久久婷婷综合| 国产精品―色哟哟| 91色视频在线| 亚洲已满18点击进入久久| 欧美在线观看视频在线| 丝袜国产日韩另类美女| 日韩欧美成人午夜| 国产一区二区中文字幕| 中文字幕欧美日本乱码一线二线 | 亚洲免费av在线| 欧美美女网站色| 天堂久久一区二区三区| 欧美成人官网二区| 国产精品99久久久久久久vr| 国产精品欧美精品| 91成人在线精品| 麻豆精品视频在线| 亚洲国产成人一区二区三区| 色美美综合视频| 免费不卡在线视频| 欧美激情资源网| 欧美亚男人的天堂| 激情伊人五月天久久综合| 国产精品欧美一区喷水| 欧美日韩精品是欧美日韩精品| 麻豆国产91在线播放| 中文字幕亚洲一区二区va在线| 色八戒一区二区三区| 免费成人小视频| 亚洲欧美在线视频| 欧美一级片在线看| av一区二区三区四区| 日韩成人精品在线观看| 国产精品美日韩| 91麻豆精品国产| 99国产欧美久久久精品| 奇米影视一区二区三区| 国产精品久久久久久久第一福利 | 国产乱人伦偷精品视频免下载| 亚洲男人天堂一区| 日韩三级视频中文字幕| 色狠狠综合天天综合综合| 国产一区在线观看麻豆| 视频一区二区三区中文字幕| 国产精品免费av| 久久这里只有精品视频网| 欧美日韩在线播放三区四区| 成人精品视频一区二区三区 | 欧美久久免费观看| 99国产精品久久久| 国产综合色在线| 日韩黄色在线观看| 亚洲免费在线视频| 中文字幕日本不卡| 国产亚洲欧美日韩俺去了| 欧美一区二区三区免费视频| 在线观看国产一区二区| 91小宝寻花一区二区三区| 国产精品一区久久久久| 另类人妖一区二区av| 天堂久久一区二区三区| 亚洲午夜电影网| 亚洲综合另类小说| 亚洲六月丁香色婷婷综合久久| 国产人伦精品一区二区| 国产亚洲综合在线| 国产视频一区二区在线观看| 日韩精品在线网站| 26uuu国产电影一区二区| 日韩欧美精品在线| 日韩欧美在线观看一区二区三区| 777a∨成人精品桃花网| 欧美日韩国产首页| 欧美色电影在线| 欧美无砖专区一中文字| 欧美日韩在线一区二区| 欧美肥妇free| 日韩一级成人av| 精品国产乱码久久久久久久久 | 精品福利一二区| 精品99999| 国产午夜精品一区二区三区四区| 久久久久久**毛片大全| 欧美激情一区二区三区四区| 国产精品天天看| 夜夜爽夜夜爽精品视频| 亚洲一区二区黄色| 日本亚洲电影天堂| 国产精品99久久久久久久vr| a4yy欧美一区二区三区| 欧美在线视频你懂得| 91精品午夜视频| 国产日韩欧美a| 亚洲精品大片www| 琪琪一区二区三区| 成人在线一区二区三区| 欧美中文字幕一区| 日韩精品一区二| 亚洲天堂精品在线观看| 日本成人超碰在线观看| 国产99一区视频免费| 欧美午夜视频网站| 久久久久99精品一区| 亚洲综合999| 激情另类小说区图片区视频区| 成人动漫一区二区在线| 欧美在线免费视屏| 国产欧美中文在线| 亚洲福利视频一区二区| 国产成人a级片| 欧美顶级少妇做爰| 国产精品久久毛片av大全日韩| 日韩精品视频网| av成人老司机| 久久中文娱乐网| 日韩激情av在线| 在线观看亚洲精品| 国产日韩成人精品| 蜜桃视频一区二区| 色屁屁一区二区|