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

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

?? dib.cpp

?? 一個基于PXA255的水情遙測、遙控系統(tǒng)現(xiàn)場服務(wù)器軟件
?? CPP
字號:
// DIB.cpp: implementation of the DIB class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "DIB.h"

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

///////////////////////////////我的定義///////////////////////////////////
#define DIB_HEADER_MARKER   ((WORD) ('M' << 8) | 'B')
#define WIDTHBYTES(bits)    ((((bits) + 31)>>5)<<2)
#define IS_WIN30_DIB(lpbi)  ((*(LPDWORD)(lpbi)) == sizeof(BITMAPINFOHEADER))

struct DIBINFO : public BITMAPINFO
{
	RGBQUAD	 arColors[255];    // Color table info - adds an extra 255 entries to palette

	operator LPBITMAPINFO()          { return (LPBITMAPINFO) this; }
	operator LPBITMAPINFOHEADER()    { return &bmiHeader;          }
	RGBQUAD* ColorTable()            { return bmiColors;           }
};



//////////////////////////////////////////////////////////////////////

// Construction/Destruction
//////////////////////////////////////////////////////////////////////

DIB::DIB()
{

}

DIB::~DIB()
{

}




/**************************************************************************************
  函數(shù)名:
  SaveDIBToFile			  保存DIB到文件	

  參數(shù):
  LPSTR   hDib                    指向DIB數(shù)據(jù)的指針,(BYTE)
  LPCTSTR szFileName              文件全名,(包括路徑)

  返回值:
  失敗返回 FALSE 否則 返回 TRUE
**************************************************************************************/
BOOL DIB::SaveDIBToFile(LPSTR hDib)
{
 
//	CFileDialog FileDlg(FALSE,_T("BMP"),_T("*.bmp"),OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,_T("*.bmp|*.bmp|*.*|*.*|"));
//	if(FileDlg.DoModal()!=IDOK)
//	return FALSE;
//	LPCTSTR  szFileName=(LPCTSTR)FileDlg.GetPathName();
  

	HANDLE   ghFile=NULL;
	BOOL	 bResult=FALSE;
	// Bitmap文件頭
	BITMAPFILEHEADER bmfHdr;
	
	// 指向BITMAPINFOHEADER的指針
	LPBITMAPINFOHEADER lpBI=NULL;
	
	// DIB大小
	DWORD	dwDIBSize=0;
	
	DWORD   dwBytes=0;
	
	if (hDib == NULL)
		{
		return FALSE;
		}
	
	// 讀取BITMAPINFO結(jié)構(gòu),并鎖定

	lpBI=(LPBITMAPINFOHEADER)hDib;

	if (lpBI == NULL)
		{
		return FALSE;
		}
	
	// 判斷是否是WIN3.0 DIB
	if (!IS_WIN30_DIB(lpBI))
		{
		// 返回FALSE
		return FALSE;
		}

	// 文件類型"BM"
	bmfHdr.bfType = DIB_HEADER_MARKER;
	
	// 文件頭大小+顏色表大小
	// (BITMAPINFOHEADER和BITMAPCOREHEADER結(jié)構(gòu)的第一個DWORD都是該結(jié)構(gòu)的大小)
	dwDIBSize = *(LPDWORD)lpBI + 0;//最后參數(shù)0表示是24位位圖無調(diào)色板
	
	// 計算圖像大小
	// 象素的大小
	DWORD dwBmBitsSize;
	
	// 大小為Width * Height
	dwBmBitsSize = WIDTHBYTES((lpBI->biWidth)*((DWORD)lpBI->biBitCount)) * lpBI->biHeight;
	
	// 計算出DIB真正的大小
	dwDIBSize += dwBmBitsSize;
	
	// 更新biSizeImage(很多BMP文件頭中biSizeImage的值是錯誤的,對于24位位圖來說,這里也可以為0)
	lpBI->biSizeImage = dwBmBitsSize;
	
	
	// 計算文件大小:DIB大小+BITMAPFILEHEADER結(jié)構(gòu)大小
	bmfHdr.bfSize = dwDIBSize + sizeof(BITMAPFILEHEADER);
	
	// 兩個保留字
	bmfHdr.bfReserved1 = 0;
	bmfHdr.bfReserved2 = 0;
	
	// 計算偏移量bfOffBits,它的大小為Bitmap文件頭大小+DIB頭大小+顏色表大小
	bmfHdr.bfOffBits = (DWORD)sizeof(BITMAPFILEHEADER) + lpBI->biSize
		+ 0;//最后參數(shù)0表示是24位位圖無調(diào)色板

	//打開文件
	ghFile=CreateFile(szFileName, GENERIC_WRITE|GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL,
		CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);

	if (ghFile==INVALID_HANDLE_VALUE)
		{
		//NKDbgPrintfW(_T("save dib to file fail. \r\n"));
		return FALSE;
		}
	//寫文件頭
	bResult=WriteFile(ghFile,(LPSTR)&bmfHdr,sizeof(BITMAPFILEHEADER),&dwBytes,NULL); 
	ASSERT(bResult!=FALSE);
	// 寫DIB頭和象素
	bResult=WriteFile(ghFile,(LPSTR)lpBI,dwDIBSize,&dwBytes,NULL);
	ASSERT(bResult!=FALSE);
	
	CloseHandle(ghFile);

	
	// 返回TRUE
	return TRUE;
}

/**************************************************************************************
  
  函數(shù)名:
  GettingBits			  通過圖像句柄得到DIB圖像數(shù)據(jù)

  參數(shù):
  HBITMAP hSourceBitmap           圖像句柄                

  返回值:

  LPSTR lpDIB                     DIB 指針

  說明:                          源句柄需要在函數(shù)外部刪除。

**************************************************************************************/
LPSTR DIB::GettingBits(HBITMAP hSourceBitmap) 
{
	LPSTR	lpDIB=NULL;
	//1. Initialize source bitmap. For example load from resources.
	//HBITMAP hSourceBitmap = LoadBitmap(g_hInst, MAKEINTRESOURCE(IDB_BITMAP1));

	//2. Getting bimap size.
	BITMAP bm;
	GetObject(hSourceBitmap, sizeof(BITMAP), &bm);

	lpDIB=(LPSTR)LocalAlloc(LPTR,bm.bmHeight*WIDTHBYTES(bm.bmWidth*24)+40);
	
	if(lpDIB==NULL)
		{
		return NULL;
		}

	//3. Creating new bitmap and receive pointer to it's bits.
	HBITMAP hTargetBitmap;
	void *pBuffer;

	//3.1 Initilize DIBINFO structure
	DIBINFO  dibInfo;
	dibInfo.bmiHeader.biBitCount = 24;
	dibInfo.bmiHeader.biClrImportant = 0;
	dibInfo.bmiHeader.biClrUsed = 0;
	dibInfo.bmiHeader.biCompression = 0;
	dibInfo.bmiHeader.biHeight = bm.bmHeight;
	dibInfo.bmiHeader.biPlanes = 1;
	dibInfo.bmiHeader.biSize = 40;
	dibInfo.bmiHeader.biSizeImage = WIDTHBYTES(bm.bmWidth*24)*bm.bmHeight;
	dibInfo.bmiHeader.biWidth = bm.bmWidth;
	dibInfo.bmiHeader.biXPelsPerMeter = 3780;
	dibInfo.bmiHeader.biYPelsPerMeter = 3780;
	dibInfo.bmiColors[0].rgbBlue = 0;
	dibInfo.bmiColors[0].rgbGreen = 0;
	dibInfo.bmiColors[0].rgbRed = 0;
	dibInfo.bmiColors[0].rgbReserved = 0;

	//3.2 Create bitmap and receive pointer to points into pBuffer
	HDC hDC = ::GetDC(NULL);
	ASSERT(hDC);
	hTargetBitmap = CreateDIBSection(
		hDC,
		(const BITMAPINFO*)dibInfo,
		DIB_RGB_COLORS,
		(void**)&pBuffer,
		NULL,
		0);

	::ReleaseDC(NULL, hDC);


	//4. Copy source bitmap into the target bitmap.

	//4.1 Create 2 device contexts 
	HDC memDc;
	memDc=CreateCompatibleDC(NULL);
	ASSERT(memDc!=NULL);

	HDC targetDc;
	targetDc=CreateCompatibleDC(NULL);
	ASSERT(targetDc!=NULL);

	//4.2 Select source bitmap into one DC, target into another

	HBITMAP hOldBitmap1 = (HBITMAP)::SelectObject(memDc, hSourceBitmap);
	HBITMAP hOldBitmap2 = (HBITMAP)::SelectObject(targetDc, hTargetBitmap);

	//4.3 Copy source bitmap into the target one
	BitBlt(targetDc,0, 0, bm.bmWidth, bm.bmHeight, memDc, 0, 0, SRCCOPY);

	//4.4 Restore device contexts
	::SelectObject(memDc, hOldBitmap1);
	::SelectObject(targetDc, hOldBitmap2);
	DeleteDC(memDc);
	DeleteDC(targetDc);

	//Here we can bitmap bits: pBuffer. Note:
	// 1. pBuffer contains 3 bytes per point
	// 2. Lines ane from the bottom to the top!
	// 3. Points in the line are from the left to the right
	// 4. Bytes in one point are BGR (blue, green, red) not RGB
	// 5. Don't delete pBuffer, it will be automatically deleted 
	//    when delete hTargetBitmap

	LPSTR lptmp=lpDIB;
	CopyMemory(lptmp,&dibInfo.bmiHeader,40);
	lptmp+=40;
	CopyMemory(lptmp,pBuffer,dibInfo.bmiHeader.biSizeImage);

//	DeleteObject(hSourceBitmap);
	DeleteObject(hTargetBitmap);

	return lpDIB;
}

//CopyScreenToDIB,直接轉(zhuǎn)換為DIB數(shù)據(jù)
HBITMAP DIB::CopyScreenToBitmap(HWND hPic, LPRECT lpRect)
{
	int       nWidth, nHeight; 
	HDC		   hScrDC;
	HDC		   hMemDC;      
	// 屏幕和內(nèi)存設(shè)備描述表
	
	HBITMAP		hBitmap; 
	HBITMAP		hOldBitmap;   

	// 選定區(qū)域坐標(biāo)
	int       nX, nY, nX2, nY2; 
	
	// 位圖寬度和高度
//	int       nWidth, nHeight;  
    
	// 屏幕分辨率
	int       xScrn, yScrn;     

        // 確保選定區(qū)域不為空矩形
	if (IsRectEmpty(lpRect))	
		return NULL;
	//為屏幕創(chuàng)建設(shè)備描述表
	
	//hScrDC = CreateDC("DISPLAY", NULL, NULL, NULL); 
	//這里如果使用DISPLAY設(shè)備DC的話
	//也許會更有趣:)。
	hScrDC = GetDC(hPic);
	//為屏幕設(shè)備描述表創(chuàng)建兼容的內(nèi)存設(shè)備描述表
	hMemDC = CreateCompatibleDC(hScrDC);
	// 獲得選定區(qū)域坐標(biāo)
	nX =  lpRect->left;
	nY =  lpRect->top;
	nX2 = lpRect->right;
	nY2 = lpRect->bottom;
	// 獲得屏幕分辨率
	RECT rc1;
	GetWindowRect(hPic,&rc1);
	//   xScrn = GetDeviceCaps(hScrDC, HORZRES);
	xScrn=rc1.right-rc1.left;
	//   yScrn = GetDeviceCaps(hScrDC, VERTRES);
	yScrn=rc1.bottom-rc1.top;
	//確保選定區(qū)域是可見的
	if (nX < 0)
		nX = 0;
	if (nY < 0)
		nY = 0;
	if (nX2 > xScrn)
		nX2 = xScrn;
	if (nY2 > yScrn)
		nY2 = yScrn;
	nWidth=nX2 - nX;
	nHeight=nY2 - nY;
	// 創(chuàng)建一個與屏幕設(shè)備描述表兼容的位圖
	hBitmap = CreateCompatibleBitmap(hScrDC, nWidth, nHeight);
	// 把新位圖選到內(nèi)存設(shè)備描述表中
	hOldBitmap = (HBITMAP)SelectObject(hMemDC,hBitmap);
	// 把屏幕設(shè)備描述表拷貝到內(nèi)存設(shè)備描述表中
	BitBlt(hMemDC, 0, 0, nWidth, nHeight,hScrDC, nX, nY, SRCCOPY);
	//得到屏幕位圖的句柄
	hBitmap=(HBITMAP)SelectObject(hMemDC, hOldBitmap);
	//清除 
	ReleaseDC(hPic,hScrDC);
	DeleteDC(hMemDC);
	// 返回位圖句柄
	return hBitmap;
	
}
///////////////////////////////////////////////////////////////////
HBITMAP DIB::DIBLoaditmap()
{
	CString lpszFileName;
	HBITMAP		hBitmap;

	TCHAR   szFileter[] = _T("BMP Files(*.BMP)|*.BMP||*.* Files(*.*)|*.*||");
	CFileDialog FileDlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,szFileter);
	if(FileDlg.DoModal()!=IDOK)
	return NULL;
	lpszFileName=FileDlg.GetPathName();
	DeleteObject(hBitmap);
	

	hBitmap=SHLoadDIBitmap(lpszFileName);
	return hBitmap;

}






?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
天堂成人免费av电影一区| 91麻豆精品国产综合久久久久久| 久久超碰97中文字幕| 亚洲国产美女搞黄色| 亚洲一区在线看| 亚洲自拍偷拍麻豆| 一片黄亚洲嫩模| 亚洲一区二区三区在线| 亚洲国产裸拍裸体视频在线观看乱了| 中文在线免费一区三区高中清不卡| 久久综合久久久久88| 精品成人佐山爱一区二区| 2021国产精品久久精品| 欧美激情综合五月色丁香 | 精品中文字幕一区二区| 精品一区二区久久| 国产成人精品午夜视频免费| 成人激情av网| 在线观看日产精品| 欧美一区二区黄色| 26uuu久久综合| 亚洲色图欧洲色图| 亚洲一区二区三区不卡国产欧美 | 国产在线播放一区三区四| 精品无码三级在线观看视频| 韩国一区二区在线观看| 成人免费视频caoporn| 日本韩国精品一区二区在线观看| 欧美性三三影院| ww亚洲ww在线观看国产| 一区二区三区国产| 美女视频黄免费的久久| av电影天堂一区二区在线观看| 在线观看国产一区二区| 精品国产乱码久久久久久蜜臀| 中文字幕一区二区三区四区| 天天做天天摸天天爽国产一区| 国产精品一区二区x88av| 欧美日韩一区二区在线观看视频| 日韩欧美电影在线| 亚洲精品免费电影| 国产一区二区三区在线看麻豆| 91香蕉视频在线| 久久伊人蜜桃av一区二区| 一区二区三区在线观看视频| 久久爱www久久做| 欧美日韩在线精品一区二区三区激情 | 91美女视频网站| 精品国产髙清在线看国产毛片| 亚洲色大成网站www久久九九| 捆绑调教美女网站视频一区| 91一区二区三区在线播放| 精品嫩草影院久久| 日日摸夜夜添夜夜添国产精品| 成人av在线资源网| 精品国产乱码久久久久久1区2区 | 精品在线一区二区| 欧美三级韩国三级日本三斤| 国产精品家庭影院| 国产在线精品一区二区夜色| 日韩午夜电影在线观看| 亚洲成人在线免费| 欧美伊人精品成人久久综合97| 国产欧美日韩不卡| 国产精品12区| 久久久无码精品亚洲日韩按摩| 麻豆久久久久久久| 日韩欧美专区在线| 日本午夜一本久久久综合| 欧美蜜桃一区二区三区| 亚洲综合丁香婷婷六月香| 在线观看亚洲精品| 亚洲国产美国国产综合一区二区| 一本色道久久综合亚洲aⅴ蜜桃| 国产精品久久久久久久久免费丝袜 | 青娱乐精品在线视频| 欧美日韩精品高清| 丝瓜av网站精品一区二区| 91精品国产综合久久久久久| 亚洲成人av在线电影| 欧美男人的天堂一二区| 日本欧美韩国一区三区| 91精品国产手机| 久久精品国产久精国产爱| 欧美成人猛片aaaaaaa| 美女在线一区二区| 久久免费精品国产久精品久久久久| 激情深爱一区二区| 国产日韩v精品一区二区| 成人av资源在线| 亚洲制服欧美中文字幕中文字幕| 欧美日韩激情在线| 久久精品99国产精品| 久久男人中文字幕资源站| 国产精品自拍一区| 亚洲视频免费在线| 欧美日韩一区二区电影| 免费看日韩a级影片| 精品国产一区二区精华| 成人综合在线观看| 亚洲一级二级三级| 欧美成人精品1314www| 成人午夜视频在线| 亚洲国产欧美日韩另类综合| 精品国产sm最大网站免费看 | 亚洲午夜一区二区| 精品理论电影在线观看| 不卡的电影网站| 日韩高清欧美激情| 国产精品青草综合久久久久99| 欧美日韩一区在线观看| 国产精品一区二区果冻传媒| 亚洲综合激情另类小说区| 欧美精品一区二区在线观看| 色综合久久99| 国产精品性做久久久久久| 亚洲黄色小视频| 国产欧美一区二区精品忘忧草| 欧美无人高清视频在线观看| 国产精品一区在线观看你懂的| 亚洲精品欧美综合四区| 久久久亚洲精品一区二区三区| 一本色道a无线码一区v| 国产激情视频一区二区在线观看| 午夜伦欧美伦电影理论片| 国产精品卡一卡二卡三| 日韩一级免费一区| 欧美日韩中文字幕一区二区| 波多野结衣中文一区| 久久精品72免费观看| 亚洲韩国一区二区三区| 亚洲欧美日韩小说| 国产精品天美传媒| 久久精品在线观看| 日韩一区二区在线看片| 69久久夜色精品国产69蝌蚪网| 日本韩国一区二区| 成人黄色在线视频| 国产成+人+日韩+欧美+亚洲| 九色综合狠狠综合久久| 五月天欧美精品| 亚洲国产精品综合小说图片区| 亚洲精品国产高清久久伦理二区| 中文字幕在线不卡视频| 国产欧美一区在线| 国产亚洲欧美一区在线观看| 欧美电视剧在线看免费| 日韩欧美亚洲另类制服综合在线| 欧美蜜桃一区二区三区| 欧美日韩国产首页在线观看| 欧美在线小视频| 91国偷自产一区二区开放时间 | 欧美一卡在线观看| 欧美日韩国产大片| 欧美日韩一区二区在线观看| 欧美日韩一本到| 欧美日韩精品一区二区三区四区| 欧美日韩国产经典色站一区二区三区| 欧美性猛交xxxx黑人交| 欧美亚洲禁片免费| 欧美一区二区精品久久911| 日韩一区二区不卡| 久久久综合网站| 欧美高清在线精品一区| 中文字幕亚洲在| 亚洲精品精品亚洲| 蜜臀99久久精品久久久久久软件| 美腿丝袜在线亚洲一区| 精品一区二区三区在线观看| 国产精品77777| 91在线视频网址| 欧美日韩在线播放一区| 日韩精品一区二区三区在线播放 | 欧美日韩精品福利| 精品少妇一区二区三区免费观看| 久久精品亚洲乱码伦伦中文| 亚洲欧美在线另类| 亚洲二区在线视频| 激情欧美一区二区| k8久久久一区二区三区| 欧美精品色综合| 久久嫩草精品久久久精品| 成人免费在线播放视频| 午夜精品福利一区二区蜜股av | 日韩久久久久久| 中文字幕一区二区三| 天天综合天天综合色| 成人免费视频caoporn| 欧美日韩三级视频| 中文一区二区完整视频在线观看| 亚洲人被黑人高潮完整版| 日韩高清国产一区在线| 99精品久久久久久| 日韩精品一区二区三区中文不卡| 亚洲图片另类小说| 久久精品久久99精品久久| 色天天综合久久久久综合片| 久久蜜臀精品av| 亚洲成人第一页| 91污片在线观看|