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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? cdib.cpp

?? vc++數(shù)字圖像處理 ,是一本很不錯(cuò)的介紹數(shù)字圖像方面的書籍,這里有本書的全部源碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號(hào):
// cdib.cpp// new version for WIN32#include "stdafx.h"#include "cdib.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endifIMPLEMENT_SERIAL(CDib, CObject, 0);CDib::CDib(){	m_hFile = NULL;	m_hBitmap = NULL;	m_hPalette = NULL;	m_nBmihAlloc = m_nImageAlloc = noAlloc;	Empty();}CDib::CDib(CSize size, int nBitCount){	m_hFile = NULL;	m_hBitmap = NULL;	m_hPalette = NULL;	m_nBmihAlloc = m_nImageAlloc = noAlloc;	Empty();	ComputePaletteSize(nBitCount);	m_lpBMIH = (LPBITMAPINFOHEADER) new 		char[sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * m_nColorTableEntries];	m_nBmihAlloc = crtAlloc;	m_lpBMIH->biSize = sizeof(BITMAPINFOHEADER);	m_lpBMIH->biWidth = size.cx;	m_lpBMIH->biHeight = size.cy;	m_lpBMIH->biPlanes = 1;	m_lpBMIH->biBitCount = nBitCount;	m_lpBMIH->biCompression = BI_RGB;	m_lpBMIH->biSizeImage = 0;	m_lpBMIH->biXPelsPerMeter = 0;	m_lpBMIH->biYPelsPerMeter = 0;	m_lpBMIH->biClrUsed = m_nColorTableEntries;	m_lpBMIH->biClrImportant = m_nColorTableEntries;	ComputeMetrics();	memset(m_lpvColorTable, 0, sizeof(RGBQUAD) * m_nColorTableEntries);	m_lpImage = NULL;  // no data yet}CDib::~CDib(){	Empty();}CSize CDib::GetDimensions(){		if(m_lpBMIH == NULL) return CSize(0, 0);	return CSize((int) m_lpBMIH->biWidth, (int) m_lpBMIH->biHeight);}BOOL CDib::AttachMapFile(const char* strPathname, BOOL bShare) // for reading{	// if we open the same file twice, Windows treats it as 2 separate files	// doesn't work with rare BMP files where # palette entries > biClrUsed	HANDLE hFile = ::CreateFile(strPathname, GENERIC_WRITE | GENERIC_READ,		bShare ? FILE_SHARE_READ : 0,		NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);	ASSERT(hFile != INVALID_HANDLE_VALUE);	DWORD dwFileSize = ::GetFileSize(hFile, NULL);	HANDLE hMap = ::CreateFileMapping(hFile, NULL, PAGE_READWRITE, 0, 0, NULL);	DWORD dwErr = ::GetLastError();		if(hMap == NULL)	{		AfxMessageBox("Empty bitmap file");		return FALSE;	}		LPVOID lpvFile = ::MapViewOfFile(hMap, FILE_MAP_WRITE, 0, 0, 0); // map whole file	ASSERT(lpvFile != NULL);		if(((LPBITMAPFILEHEADER) lpvFile)->bfType != 0x4d42)	{		AfxMessageBox("Invalid bitmap file");		DetachMapFile();		return FALSE;	}		AttachMemory((LPBYTE) lpvFile + sizeof(BITMAPFILEHEADER));	m_lpvFile = lpvFile;	m_hFile = hFile;	m_hMap = hMap;	return TRUE;}BOOL CDib::CopyToMapFile(const char* strPathname){	// copies DIB to a new file, releases prior pointers	// if you previously used CreateSection, the HBITMAP will be NULL (and unusable)	BITMAPFILEHEADER bmfh;	bmfh.bfType = 0x4d42;  // 'BM'	bmfh.bfSize = m_dwSizeImage + sizeof(BITMAPINFOHEADER) +			sizeof(RGBQUAD) * m_nColorTableEntries + sizeof(BITMAPFILEHEADER);	// meaning of bfSize open to interpretation	bmfh.bfReserved1 = bmfh.bfReserved2 = 0;	bmfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) +			sizeof(RGBQUAD) * m_nColorTableEntries;		HANDLE hFile = ::CreateFile(strPathname, GENERIC_WRITE | GENERIC_READ, 0, NULL,		CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);	ASSERT(hFile != INVALID_HANDLE_VALUE);	int nSize =  sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) +				sizeof(RGBQUAD) * m_nColorTableEntries +  m_dwSizeImage;	HANDLE hMap = ::CreateFileMapping(hFile, NULL, PAGE_READWRITE, 0, nSize, NULL);	DWORD dwErr = ::GetLastError();	ASSERT(hMap != NULL);	LPVOID lpvFile = ::MapViewOfFile(hMap, FILE_MAP_WRITE, 0, 0, 0); // map whole file	ASSERT(lpvFile != NULL);	LPBYTE lpbCurrent = (LPBYTE) lpvFile;	memcpy(lpbCurrent, &bmfh, sizeof(BITMAPFILEHEADER)); // file header	lpbCurrent += sizeof(BITMAPFILEHEADER);	LPBITMAPINFOHEADER lpBMIH = (LPBITMAPINFOHEADER) lpbCurrent;	memcpy(lpbCurrent, m_lpBMIH,		sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * m_nColorTableEntries); // info	lpbCurrent += sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * m_nColorTableEntries;	memcpy(lpbCurrent, m_lpImage, m_dwSizeImage); // bit image	DWORD dwSizeImage = m_dwSizeImage;	Empty();	m_dwSizeImage = dwSizeImage;	m_nBmihAlloc = m_nImageAlloc = noAlloc;	m_lpBMIH = lpBMIH;	m_lpImage = lpbCurrent;	m_hFile = hFile;	m_hMap = hMap;	m_lpvFile = lpvFile;	ComputePaletteSize(m_lpBMIH->biBitCount);	ComputeMetrics();	MakePalette();	return TRUE;}BOOL CDib::AttachMemory(LPVOID lpvMem, BOOL bMustDelete, HGLOBAL hGlobal){	// assumes contiguous BITMAPINFOHEADER, color table, image	// color table could be zero length	Empty();	m_hGlobal = hGlobal;	if(bMustDelete == FALSE)	{		m_nBmihAlloc = noAlloc;	}	else	{		m_nBmihAlloc = ((hGlobal == NULL) ? crtAlloc : heapAlloc);	}	try	{		m_lpBMIH = (LPBITMAPINFOHEADER) lpvMem;		ComputeMetrics();		ComputePaletteSize(m_lpBMIH->biBitCount);		m_lpImage = (LPBYTE) m_lpvColorTable + sizeof(RGBQUAD) * m_nColorTableEntries;		MakePalette();	}	catch(CException* pe)	{		AfxMessageBox("AttachMemory error");		pe->Delete();		return FALSE;	}	return TRUE;}UINT CDib::UsePalette(CDC* pDC, BOOL bBackground /* = FALSE */){	if(m_hPalette == NULL) return 0;	HDC hdc = pDC->GetSafeHdc();	::SelectPalette(hdc, m_hPalette, bBackground);	return ::RealizePalette(hdc);}BOOL CDib::Draw(CDC* pDC, CPoint origin, CSize size){	if(m_lpBMIH == NULL) return FALSE;	if(m_hPalette != NULL)	{		::SelectPalette(pDC->GetSafeHdc(), m_hPalette, TRUE);	}	pDC->SetStretchBltMode(COLORONCOLOR);	::StretchDIBits(pDC->GetSafeHdc(), origin.x, origin.y, size.cx, size.cy,		0, 0, m_lpBMIH->biWidth, m_lpBMIH->biHeight,		m_lpImage, (LPBITMAPINFO) m_lpBMIH, DIB_RGB_COLORS, SRCCOPY);	return TRUE;}HBITMAP CDib::CreateSection(CDC* pDC /* = NULL */){	if(m_lpBMIH == NULL) return NULL;	if(m_lpImage != NULL) return NULL; // can only do this if image doesn't exist	m_hBitmap = ::CreateDIBSection(pDC->GetSafeHdc(), (LPBITMAPINFO) m_lpBMIH,		DIB_RGB_COLORS,	(LPVOID*) &m_lpImage, NULL, 0);	ASSERT(m_lpImage != NULL);	return m_hBitmap;}BOOL CDib::MakePalette(){	// makes a logical palette (m_hPalette) from the DIB's color table	// this palette will be selected and realized prior to drawing the DIB	if(m_nColorTableEntries == 0) return FALSE;	if(m_hPalette != NULL) ::DeleteObject(m_hPalette);	TRACE("CDib::MakePalette -- m_nColorTableEntries = %d\n", m_nColorTableEntries);	LPLOGPALETTE pLogPal = (LPLOGPALETTE) new char[2 * sizeof(WORD) +		m_nColorTableEntries * sizeof(PALETTEENTRY)];	pLogPal->palVersion = 0x300;	pLogPal->palNumEntries = m_nColorTableEntries;	LPRGBQUAD pDibQuad = (LPRGBQUAD) m_lpvColorTable;	for(int i = 0; i < m_nColorTableEntries; i++)	{		pLogPal->palPalEntry[i].peRed = pDibQuad->rgbRed;		pLogPal->palPalEntry[i].peGreen = pDibQuad->rgbGreen;		pLogPal->palPalEntry[i].peBlue = pDibQuad->rgbBlue;		pLogPal->palPalEntry[i].peFlags = 0;		pDibQuad++;	}	m_hPalette = ::CreatePalette(pLogPal);	delete pLogPal;	return TRUE;}	BOOL CDib::SetSystemPalette(CDC* pDC){	// if the DIB doesn't have a color table, we can use the system's halftone palette	if(m_nColorTableEntries != 0) return FALSE;	m_hPalette = ::CreateHalftonePalette(pDC->GetSafeHdc());	return TRUE;}HBITMAP CDib::CreateBitmap(CDC* pDC){    if (m_dwSizeImage == 0) return NULL;    HBITMAP hBitmap = ::CreateDIBitmap(pDC->GetSafeHdc(), m_lpBMIH,            CBM_INIT, m_lpImage, (LPBITMAPINFO) m_lpBMIH, DIB_RGB_COLORS);    ASSERT(hBitmap != NULL);    return hBitmap;}BOOL CDib::Compress(CDC* pDC, BOOL bCompress /* = TRUE */){	// 1. makes GDI bitmap from existing DIB	// 2. makes a new DIB from GDI bitmap with compression	// 3. cleans up the original DIB	// 4. puts the new DIB in the object	if((m_lpBMIH->biBitCount != 4) && (m_lpBMIH->biBitCount != 8)) return FALSE;		// compression supported only for 4 bpp and 8 bpp DIBs	if(m_hBitmap) return FALSE; // can't compress a DIB Section!	TRACE("Compress: original palette size = %d\n", m_nColorTableEntries); 	HDC hdc = pDC->GetSafeHdc();	HPALETTE hOldPalette = ::SelectPalette(hdc, m_hPalette, FALSE);	HBITMAP hBitmap;  // temporary	if((hBitmap = CreateBitmap(pDC)) == NULL) return FALSE;	int nSize = sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * m_nColorTableEntries;	LPBITMAPINFOHEADER lpBMIH = (LPBITMAPINFOHEADER) new char[nSize];	memcpy(lpBMIH, m_lpBMIH, nSize);  // new header	if(bCompress)	{		switch (lpBMIH->biBitCount)		{		case 4:			lpBMIH->biCompression = BI_RLE4;			break;		case 8:			lpBMIH->biCompression = BI_RLE8;			break;		default:			ASSERT(FALSE);		}		// calls GetDIBits with null data pointer to get size of compressed DIB		if(!::GetDIBits(pDC->GetSafeHdc(), hBitmap, 0, (UINT) lpBMIH->biHeight,						NULL, (LPBITMAPINFO) lpBMIH, DIB_RGB_COLORS))		{			AfxMessageBox("Unable to compress this DIB");			// probably a problem with the color table	 		::DeleteObject(hBitmap);			delete [] lpBMIH;			::SelectPalette(hdc, hOldPalette, FALSE);			return FALSE; 		}		if (lpBMIH->biSizeImage == 0)		{			AfxMessageBox("Driver can't do compression");

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧洲另类国产综合| 欧美一区二区视频网站| 欧美—级在线免费片| 国产一区二区三区电影在线观看| 欧美一区二区久久| 九九国产精品视频| 久久精品亚洲一区二区三区浴池| 成人一级片网址| 一区二区三区四区五区视频在线观看 | 国产精品卡一卡二| 91小视频免费看| 亚洲1区2区3区4区| 精品久久久久久亚洲综合网 | fc2成人免费人成在线观看播放| 精品一区在线看| 国产精品久久一卡二卡| 在线亚洲欧美专区二区| 日本在线播放一区二区三区| 久久综合久久综合久久| 99热99精品| 日韩中文字幕区一区有砖一区 | 亚洲精品国产a久久久久久| 欧美日韩国产乱码电影| 国产美女av一区二区三区| 亚洲男人的天堂在线观看| 欧美一区二区视频在线观看2022| 国产91精品一区二区麻豆亚洲| 一区二区三区欧美日韩| 欧美精品一区二区三区在线播放| 99精品国产99久久久久久白柏| 日韩有码一区二区三区| 国产女人aaa级久久久级| 欧美日韩免费视频| 国产高清精品在线| 亚洲成人一区在线| 国产欧美一区二区精品忘忧草| 欧美日韩mp4| 99久久精品国产观看| 久久机这里只有精品| 一区二区国产视频| 久久久av毛片精品| 欧美一区二区在线视频| 91女神在线视频| 国产成人av一区二区三区在线观看| 一级日本不卡的影视| 亚洲国产精品高清| 精品久久一区二区三区| 欧美亚一区二区| 国产mv日韩mv欧美| 久久精品国产精品亚洲综合| 亚洲午夜在线视频| 国产精品美女久久久久久久久| 欧美xxxx老人做受| 日韩一区二区三区视频在线| 在线观看国产一区二区| av爱爱亚洲一区| 国产999精品久久久久久绿帽| 卡一卡二国产精品 | 亚洲精品一二三| 国产精品系列在线| 久久久精品国产免大香伊| 欧美成人性战久久| 日韩欧美激情在线| 日韩一级大片在线| 91精品综合久久久久久| 这里只有精品视频在线观看| 欧美中文字幕一区二区三区| 在线观看视频一区二区| 91电影在线观看| 色婷婷香蕉在线一区二区| 一本一道久久a久久精品综合蜜臀| 26uuu精品一区二区 | 久久综合九色综合久久久精品综合| 欧美乱熟臀69xxxxxx| 欧美色视频在线观看| 欧美浪妇xxxx高跟鞋交| 欧美高清视频一二三区| 3atv在线一区二区三区| 91精品国产一区二区三区香蕉| 7777精品伊人久久久大香线蕉的| 欧美日韩一区精品| 91精品婷婷国产综合久久| 欧美成人精品1314www| 精品粉嫩超白一线天av| 久久综合狠狠综合久久激情| 国产免费观看久久| 国产精品久久久久国产精品日日| 国产精品久久久久三级| 136国产福利精品导航| 亚洲一区二区欧美| 视频一区中文字幕国产| 麻豆91在线播放免费| 美女一区二区视频| 国产在线国偷精品产拍免费yy| 国产成人综合亚洲网站| 国产69精品久久久久毛片| 99久久精品一区| 欧美日韩一级视频| 欧美大胆一级视频| 欧美国产成人在线| 一区二区三区不卡视频在线观看| 日日夜夜一区二区| 国产精品一区三区| 91久久国产综合久久| 日韩三级电影网址| 国产精品福利影院| 五月天国产精品| 国产成人亚洲综合a∨猫咪| 91在线云播放| 日韩欧美国产一区在线观看| 欧美激情中文不卡| 午夜电影久久久| 豆国产96在线|亚洲| 欧美在线free| 久久精品一区二区| 亚洲一区二区三区四区在线免费观看| 久久精品二区亚洲w码| www.欧美色图| 91精品国产色综合久久ai换脸 | 国产剧情一区二区| 91丨porny丨最新| 欧美妇女性影城| 国产精品你懂的在线| 日日骚欧美日韩| 94色蜜桃网一区二区三区| 9191久久久久久久久久久| 国产精品三级在线观看| 美女一区二区三区| 色综合久久66| 欧美激情在线看| 欧美性感一类影片在线播放| 久久久久久97三级| 秋霞国产午夜精品免费视频| 91美女在线看| 日本一区二区综合亚洲| 日本亚洲视频在线| 欧美日韩一本到| 一区二区国产视频| voyeur盗摄精品| 久久久一区二区| 欧美aaaaa成人免费观看视频| 色悠悠久久综合| 中文字幕在线不卡视频| 国产福利精品一区二区| 7777精品伊人久久久大香线蕉完整版 | 午夜久久电影网| 色婷婷激情久久| 亚洲欧洲日韩在线| 成人精品国产福利| 国产日韩欧美一区二区三区乱码| 美女网站色91| 欧美一区二区精品在线| 日韩国产欧美三级| 欧美日韩国产综合一区二区| 亚洲综合在线第一页| 一本色道久久综合亚洲91| 亚洲欧美在线另类| jlzzjlzz亚洲女人18| 亚洲国产精品t66y| 成人午夜视频网站| 国产丝袜美腿一区二区三区| 激情成人综合网| 精品久久久久久久人人人人传媒 | 国产一区二区剧情av在线| 日韩三级在线免费观看| 三级不卡在线观看| 日韩欧美综合在线| 韩国av一区二区三区在线观看| 欧美一区二区三区在| 久久99精品网久久| 久久精品日产第一区二区三区高清版 | 色噜噜夜夜夜综合网| 亚洲视频在线一区二区| 日本韩国精品在线| 一区二区三区不卡在线观看 | 不卡的av中国片| 136国产福利精品导航| 91福利在线播放| 图片区小说区国产精品视频| 日韩视频免费观看高清完整版| 免费成人美女在线观看.| 精品欧美一区二区三区精品久久 | 在线国产亚洲欧美| 肉肉av福利一精品导航| 日韩美女一区二区三区四区| 国产精品资源在线看| 亚洲欧美一区二区不卡| 欧美视频一区二区在线观看| 日韩成人免费在线| 久久综合久久99| 色噜噜久久综合| 奇米在线7777在线精品| 日本成人在线电影网| 国产欧美一区二区三区沐欲| 91日韩精品一区| 日韩电影在线一区| 国产亚洲欧美在线| 欧美色男人天堂| 国产永久精品大片wwwapp| 中文字幕一区二区三区四区|