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

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

?? dibapi.cpp

?? VC++數字圖像處理 配套光盤
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
		
		// 讀取dwClrUsed值
		dwClrUsed = ((LPBITMAPINFOHEADER)lpbi)->biClrUsed;
		
		if (dwClrUsed != 0)
		{
			// 如果dwClrUsed(實際用到的顏色數)不為0,直接返回該值
			return (WORD)dwClrUsed;
		}
	}

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

		case 4:
			return 16;

		case 8:
			return 256;
					
		default:
			return 1;
	}
}


/*************************************************************************
 *
 * 函數名稱:
 *   DIBBitCount()
 *
 * 參數:
 *   LPSTR lpbi         - 指向DIB對象的指針
 *
 * 返回值:
 *   WORD               - 返回調色板中顏色的種數
 *
 * 說明:
 *   該函數返回DIBBitCount。
 *
 ************************************************************************/
WORD WINAPI DIBBitCount(LPSTR lpbi)
{
	WORD wBitCount;

	// 讀取象素的位數
	if (IS_WIN30_DIB(lpbi))
	{
		// 讀取biBitCount值
		wBitCount = ((LPBITMAPINFOHEADER)lpbi)->biBitCount;
	}
	else
	{
		// 讀取biBitCount值
		wBitCount = ((LPBITMAPCOREHEADER)lpbi)->bcBitCount;
	}
	
	// 返回wBitCount
	return wBitCount;
}

/*************************************************************************
 *
 * 函數名稱:
 *   CopyHandle()
 *
 * 參數:
 *   HGLOBAL h          - 要復制的內存區域
 *
 * 返回值:
 *   HGLOBAL            - 復制后的新內存區域
 *
 * 說明:
 *   該函數復制指定的內存區域。返回復制后的新內存區域,出錯時返回0。
 *
 ************************************************************************/

HGLOBAL WINAPI 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 WINAPI SaveDIB(HDIB hDib, CFile& file)
{
	// Bitmap文件頭
	BITMAPFILEHEADER bmfHdr;
	
	// 指向BITMAPINFOHEADER的指針
	LPBITMAPINFOHEADER lpBI;
	
	// DIB大小
	DWORD dwDIBSize;

	if (hDib == NULL)
	{
		// 如果DIB為空,返回FALSE
		return FALSE;
	}

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

	// 填充文件頭

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

	// 計算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;

		// 大小為Width * Height
		dwBmBitsSize = WIDTHBYTES((lpBI->biWidth)*((DWORD)lpBI->biBitCount)) * lpBI->biHeight;
		
		// 計算出DIB真正的大小
		dwDIBSize += dwBmBitsSize;

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


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

	// 計算偏移量bfOffBits,它的大小為Bitmap文件頭大小+DIB頭大小+顏色表大小
	bmfHdr.bfOffBits = (DWORD)sizeof(BITMAPFILEHEADER) + lpBI->biSize
											  + PaletteSize((LPSTR)lpBI);
	// 嘗試寫文件
	TRY
	{
		// 寫文件頭
		file.Write((LPSTR)&bmfHdr, sizeof(BITMAPFILEHEADER));
		
		// 寫DIB頭和象素
		file.WriteHuge(lpBI, dwDIBSize);
	}
	CATCH (CFileException, e)
	{
		// 解除鎖定
		::GlobalUnlock((HGLOBAL) hDib);
		
		// 拋出異常
		THROW_LAST();
	}
	END_CATCH
	
	// 解除鎖定
	::GlobalUnlock((HGLOBAL) hDib);
	
	// 返回TRUE
	return TRUE;
}


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

HDIB WINAPI ReadDIBFile(CFile& file)
{
	BITMAPFILEHEADER bmfHeader;
	DWORD dwBitsSize;
	HDIB hDIB;
	LPSTR pDIB;

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

	// 嘗試讀取DIB文件頭
	if (file.Read((LPSTR)&bmfHeader, sizeof(bmfHeader)) != sizeof(bmfHeader))
	{
		// 大小不對,返回NULL。
		return NULL;
	}

	// 判斷是否是DIB對象,檢查頭兩個字節是否是"BM"
	if (bmfHeader.bfType != DIB_HEADER_MARKER)
	{
		// 非DIB對象,返回NULL。
		return NULL;
	}

	// 為DIB分配內存
	hDIB = (HDIB) ::GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT, dwBitsSize);
	if (hDIB == 0)
	{
		// 內存分配失敗,返回NULL。
		return NULL;
	}
	
	// 鎖定
	pDIB = (LPSTR) ::GlobalLock((HGLOBAL) hDIB);

	// 讀象素
	if (file.ReadHuge(pDIB, dwBitsSize - sizeof(BITMAPFILEHEADER)) !=
		dwBitsSize - sizeof(BITMAPFILEHEADER) )
	{
		// 大小不對。
		
		// 解除鎖定
		::GlobalUnlock((HGLOBAL) hDIB);
		
		// 釋放內存
		::GlobalFree((HGLOBAL) hDIB);
		
		// 返回NULL。
		return NULL;
	}
	
	// 解除鎖定
	::GlobalUnlock((HGLOBAL) hDIB);
	
	// 返回DIB句柄
	return hDIB;
}

/*************************************************************************
 *
 * 函數名稱:
 *   DIBToPCX256()
 *
 * 參數:
 *   LPSTR lpDIB        - 指向DIB對象的指針
 *   CFile& file        - 要保存的文件
 *
 * 返回值:
 *   BOOL               - 成功返回True,否則返回False。
 *
 * 說明:
 *   該函數將指定的256色DIB對象保存為256色PCX文件。
 *
 *************************************************************************/
BOOL WINAPI DIBToPCX256(LPSTR lpDIB, CFile& file)
{
	// 循環變量
	LONG	i;
	LONG	j;
	
	// DIB高度
	WORD	wHeight;
	
	// DIB寬度
	WORD	wWidth;
	
	// 中間變量
	BYTE	bChar1;
	BYTE	bChar2;
	
	// 指向源圖像象素的指針
	BYTE *	lpSrc;
	
	// 指向編碼后圖像數據的指針
	BYTE *	lpDst;
	
	// 圖像每行的字節數
	LONG	lLineBytes;
	
	// 重復像素計數
	int		iCount;
	
	// 緩沖區已使用的字節數
	DWORD	dwBuffUsed;
	
	// 指向DIB象素指針
	LPSTR   lpDIBBits;
	
	// 獲取DIB高度
	wHeight = (WORD) DIBHeight(lpDIB);
	
	// 獲取DIB寬度
	wWidth  = (WORD) DIBWidth(lpDIB);
	
	// 找到DIB圖像象素起始位置
	lpDIBBits = FindDIBBits(lpDIB);
	
	// 計算圖像每行的字節數
	lLineBytes = WIDTHBYTES(wWidth * 8);
	
	
	//*************************************************************************
	// PCX文件頭
	PCXHEADER pcxHdr;
	
	// 給文件頭賦值
	
	// PCX標識碼
	pcxHdr.bManufacturer = 0x0A;
	
	// PCX版本號
	pcxHdr.bVersion = 5;
	
	// PCX編碼方式(1表示RLE編碼)
	pcxHdr.bEncoding = 1;
	
	// 像素位數(256色為8位)
	pcxHdr.bBpp = 8;
	
	// 圖像相對于屏幕的左上角X坐標(以像素為單位)
	pcxHdr.wLeft = 0;
	
	// 圖像相對于屏幕的左上角Y坐標(以像素為單位)
	pcxHdr.wTop = 0;
	
	// 圖像相對于屏幕的右下角X坐標(以像素為單位)
	pcxHdr.wRight = wWidth - 1;
	
	// 圖像相對于屏幕的右下角Y坐標(以像素為單位)
	pcxHdr.wBottom = wHeight - 1;
	
	// 圖像的水平分辨率
	pcxHdr.wXResolution = wWidth;
	
	// 圖像的垂直分辨率
	pcxHdr.wYResolution = wHeight;
	
	// 調色板數據(對于256色PCX無意義,直接賦值為0)
	for (i = 0; i < 48; i ++)
	{
		pcxHdr.bPalette[i] = 0;
	}
	
	// 保留域,設定為0。
	pcxHdr.bReserved = 0;
	
	// 圖像色彩平面數目(對于256色PCX設定為1)。
	pcxHdr.bPlanes = 1;
	
	// 圖像的寬度(字節為單位),必須為偶數。
//	if ((wWidth & 1) == 0)
//	{
		pcxHdr.wLineBytes = wWidth;
//	}
//	else
//	{
//		pcxHdr.wLineBytes = wWidth + 1;
//	}
	
	// 圖像調色板的類型,1表示彩色或者單色圖像,2表示圖像是灰度圖。
	pcxHdr.wPaletteType = 1;
	
	// 制作該圖像的屏幕寬度(像素為單位)
	pcxHdr.wSrcWidth = 0;
	
	// 制作該圖像的屏幕高度(像素為單位)
	pcxHdr.wSrcDepth = 0;
	
	// 保留域,取值設定為0。
	for (i = 0; i < 54; i ++)
	{
		pcxHdr.bFiller[i] = 0;
	}
	
	// 寫入文件頭
	file.Write((LPSTR)&pcxHdr, sizeof(PCXHEADER));
	
	//*******************************************************************************
	// 開始編碼
	
	// 開辟一片緩沖區(2被原始圖像大小)以保存編碼結果

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲www啪成人一区二区麻豆| 91在线播放网址| 51精品视频一区二区三区| 五月综合激情网| 欧美丰满美乳xxx高潮www| 五月婷婷激情综合| 日韩欧美国产一区二区在线播放 | 中文成人综合网| 粉嫩绯色av一区二区在线观看 | 欧美激情在线观看视频免费| 激情六月婷婷久久| 国产校园另类小说区| 成人激情免费网站| 亚洲精品视频在线观看网站| 欧美丝袜自拍制服另类| 精品国产伦一区二区三区观看体验| 国产成人免费9x9x人网站视频| 国产精品久久久久久久久久免费看 | 久久麻豆一区二区| 国产风韵犹存在线视精品| 亚洲欧洲无码一区二区三区| 欧美日韩综合在线免费观看| 日韩成人一区二区| 成人黄色网址在线观看| 一区二区三区欧美日韩| 欧美一区二区在线播放| 久久国产精品露脸对白| 国产精品妹子av| 欧美日本国产视频| 国产经典欧美精品| 亚洲一区二区在线免费观看视频 | 久久久久国产成人精品亚洲午夜| 亚洲精品成a人| 日韩视频国产视频| av在线免费不卡| 日本大胆欧美人术艺术动态| 国产精品久久久一本精品| 欧美日产国产精品| 国产成人午夜99999| 午夜精品影院在线观看| 国产日产亚洲精品系列| 91国模大尺度私拍在线视频| 国产日韩欧美高清在线| 欧美日韩在线播放一区| 成人天堂资源www在线| 日韩精品亚洲一区二区三区免费| 国产精品私人影院| 欧美一级高清片| 欧美综合欧美视频| 国产91露脸合集magnet| 久久99久久99小草精品免视看| 亚洲天堂成人网| 国产精品久久久久婷婷| 日韩视频免费直播| 欧美日韩午夜精品| 91在线国产观看| 亚洲国产经典视频| 日韩情涩欧美日韩视频| 欧美片在线播放| 欧美视频一区在线观看| 99精品欧美一区二区蜜桃免费| 国产一区二区三区美女| 日韩不卡在线观看日韩不卡视频| 亚洲免费av网站| 中文字幕第一区二区| 久久美女高清视频| 精品国产成人在线影院| 日韩一卡二卡三卡| 91精品国产色综合久久ai换脸| 欧美手机在线视频| 91成人在线观看喷潮| 99视频超级精品| 成人成人成人在线视频| 成人在线视频首页| 国产精品12区| 成人av网站免费观看| 国产精品白丝jk白祙喷水网站| 国产综合色精品一区二区三区| 男人的天堂亚洲一区| 免费在线观看不卡| 免费久久精品视频| 久久aⅴ国产欧美74aaa| 捆绑紧缚一区二区三区视频| 蜜桃精品视频在线| 精品中文av资源站在线观看| 精品制服美女久久| 国产精品一区二区免费不卡| 国产专区欧美精品| 国产成人综合网站| 成人短视频下载| 色婷婷av一区二区三区大白胸| 欧洲精品在线观看| 在线观看视频一区二区欧美日韩| 欧洲一区二区av| 6080午夜不卡| 欧美精品一区二区三区蜜桃| 久久影音资源网| 国产精品视频一二三| 亚洲情趣在线观看| 亚洲成人免费影院| 激情成人午夜视频| 成人精品小蝌蚪| 日韩在线a电影| 久久99精品国产.久久久久| 国产福利精品一区二区| 91婷婷韩国欧美一区二区| 欧美性受xxxx| 国产成人av一区| 91成人免费网站| 日韩一区二区三区电影在线观看| 久久综合精品国产一区二区三区 | 91麻豆国产自产在线观看| 色噜噜狠狠色综合中国| 欧美一区二区三区公司| 久久综合色综合88| 亚洲午夜一区二区三区| 狠狠色2019综合网| 亚洲第四色夜色| 国产精品一区二区在线观看不卡 | av在线不卡网| 欧美一区二区三区日韩| 国产精品国模大尺度视频| 偷拍亚洲欧洲综合| 国产精品亚洲人在线观看| 欧美制服丝袜第一页| 精品日韩在线一区| 欧美调教femdomvk| 欧美国产日本视频| 免费视频最近日韩| 99久久精品国产一区| 欧美一区二区私人影院日本| 日韩一区日韩二区| 极品销魂美女一区二区三区| 91看片淫黄大片一级在线观看| 欧美成人精品1314www| 亚洲欧美另类久久久精品2019| 久久狠狠亚洲综合| 欧美性生活久久| 一区免费观看视频| 国产乱码一区二区三区| 欧美一区在线视频| 亚洲色图制服丝袜| 国产成人精品亚洲日本在线桃色| 欧美日韩精品福利| 一区二区三区四区不卡视频| 国产一区二区三区综合| 欧美一区二区网站| 日日骚欧美日韩| 91福利视频在线| 亚洲欧美精品午睡沙发| 成人激情av网| 国产欧美一区二区在线观看| 精品在线亚洲视频| 日韩一级欧美一级| 五月激情六月综合| 一本色道a无线码一区v| 国产精品久久网站| 粗大黑人巨茎大战欧美成人| 26uuu国产日韩综合| 欧美aⅴ一区二区三区视频| 欧美无乱码久久久免费午夜一区 | 国产欧美中文在线| 国产自产视频一区二区三区| 欧美一级在线观看| 日本不卡视频一二三区| 欧美日韩1区2区| 日韩福利电影在线观看| 欧美私人免费视频| 亚洲成人av在线电影| 欧美日韩精品一区二区天天拍小说| 亚洲精品国产无天堂网2021 | 久久亚洲综合色| 精品一区二区三区影院在线午夜| 欧美一级在线免费| 精品中文字幕一区二区小辣椒| 日韩欧美国产综合| 国产盗摄一区二区| 亚洲国产精品t66y| 99久久精品免费| 在线成人av网站| 日韩电影免费在线| 欧美xxxx在线观看| 国产成人精品aa毛片| 国产精品伦理在线| 欧洲一区在线观看| 久久色成人在线| 国产成人亚洲精品狼色在线| 国产精品全国免费观看高清| 色哟哟一区二区在线观看| 亚洲一区二区不卡免费| 欧美一二三四区在线| 国产乱子伦一区二区三区国色天香 | 久久亚洲一级片| 粉嫩av一区二区三区在线播放| 最新久久zyz资源站| 欧美在线免费观看视频| 日产欧产美韩系列久久99| 久久综合九色综合欧美就去吻| 国产精品白丝jk黑袜喷水| 中文字幕日韩精品一区|