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

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

?? dibshow.cpp

?? 《Visual C++數字圖像獲取 處理及實踐應用》一書的源代碼
?? CPP
字號:

/*

BITMAPFILEHEADER   bf;
BITMAPINFOHEADER   bi;
BOOL LoadBmpFile (HWND hWnd,char *BmpFileName)
{
	//文件句柄
	HFILE              hf; 
	
	//指向BITMAPINFOHEADER結構的指針
	LPBITMAPINFOHEADER lpImgData; 
	
	//指向邏輯調色板結構的指針	
	LOGPALETTE         *pPal; 
	
	//指向RGBQUAD結構的指針
	LPRGBQUAD          lpRGB; 
	
	//用來保存設備中原來的調色板
	HPALETTE           hPrevPalette; 
	
	//設備句柄
	HDC                hDc; 
	
	//存儲調色板的局部內存句柄
	HLOCAL             hPal; 
	
	//每一行的字節數
	DWORD  		  LineBytes;  
	
	//實際的圖象數據占用的字節數
	DWORD 		  ImgSize;   
	
	//實際用到的顏色數 ,即調色板數組中的顏色個數
	DWORD             NumColors; 
	DWORD             i;

	if((hf=_lopen(BmpFileName,OF_READ))==HFILE_ERROR){
		MessageBox(hWnd,"File c:\\test.bmp not found!","Error Message",MB_OK|MB_ICONEXCLAMATION);
		return FALSE; //打開文件錯誤,返回
	}

	//將BITMAPFILEHEADER結構從文件中讀出,填寫到bf中
	_lread(hf,(LPSTR)&bf,sizeof(BITMAPFILEHEADER)); 
	
	//將BITMAPINFOHEADER結構從文件中讀出,填寫到bi中
	_lread(hf,(LPSTR)&bi,sizeof(BITMAPINFOHEADER));
    
	//我們定義了一個宏 #define WIDTHBYTES(i)    ((i+31)/32*4)
	//上面曾經提到過,每一行的字節數必須是4的整倍數,
	//只要調用WIDTHBYTES(bi.biWidth*bi.biBitCount)就能完成這一換算
	//舉一個例子,對于2色圖,如果圖象寬是31,則每一行需要31位存儲,合3個字節加
	//7位,因為字節數必須是4的整倍數,所以應該是4,而此時的//biWidth=31,biBitCount=1,WIDTHBYTES(31*1)=4,和我們設想的一樣。
	//再舉一個256色的例子,如果圖象寬是31,則每一行需要31個字節存儲,因為字節數
	//必須是4的整倍數,所以應該是32,而此時//biWidth=31,biBitCount=8,WIDTHBYTES(31*8)=32,和我們設想的一樣。你可以多舉
	//幾個例子來驗證一下
	//LineBytes為每一行的字節數
	LineBytes=(DWORD)WIDTHBYTES(bi.biWidth*bi.biBitCount);
	
	//ImgSize為實際的圖象數據占用的字節數
	ImgSize=(DWORD)LineBytes*bi.biHeight;
	
	//NumColors為實際用到的顏色數 ,即調色板數組中的顏色個數
	if(bi.biClrUsed!=0)
		NumColors=(DWORD)bi.biClrUsed; //如果bi.biClrUsed不為零,就是本圖象實際           
		//用到的顏色數
	else //否則,用到的顏色數為2的biBitCount次方。
	switch(bi.biBitCount){
       		case 1:
        	    NumColors=2;
        	    break;
        	case 4:
        	    NumColors=16;
        	    break;
        	case 8:
        	    NumColors=256;
        	    break;
        	case 24:
        	    NumColors=0; //對于真彩色圖,沒用到調色板
        	    break;
              default:
                  //不處理其它的顏色數,認為出錯。
                  MessageBox(hWnd,"Invalid color numbers!","Error Message",MB_OK|MB_ICONEXCLAMATION);
                  _lclose(hf);
                  return FALSE; //關閉文件,返回FALSE
           }

	if(bf.bfOffBits!=(DWORD)(NumColors*sizeof(RGBQUAD)+sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)))
	{
		//計算出的偏移量與實際偏移量不符,一定是顏色數出錯
    		MessageBox(hWnd,"Invalid color numbers!","Error Message" ,MB_OK|MB_ICONEXCLAMATION);
       		_lclose(hf);
       		return FALSE; //關閉文件,返回FALSE
	}

	bf.bfSize=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+NumColors*sizeof(RGBQUAD)+ImgSize;
	
	//分配內存,大小為BITMAPINFOHEADER結構長度加調色板+實際位圖數據
  	if((hImgData=GlobalAlloc(GHND,(DWORD)(sizeof(BITMAPINFOHEADER)+NumColors*sizeof(RGBQUAD)+ImgSize)))==NULL)
	{
		//分配內存錯誤
    		MessageBox(hWnd,"Error alloc memory!","ErrorMessage",MB_OK|MB_ICONEXCLAMATION);
    		_lclose(hf);
    	   	return FALSE; //關閉文件,返回FALSE
	}

  	//指針lpImgData指向該內存區
  	lpImgData=(LPBITMAPINFOHEADER)GlobalLock(hImgData); 
  
  	//文件指針重新定位到BITMAPINFOHEADER開始處
  	_llseek(hf,sizeof(BITMAPFILEHEADER),SEEK_SET);

  	//將文件內容讀入lpImgData
  	_hread(hf,(char *)lpImgData,(long)sizeof(BITMAPINFOHEADER)
         +(long)NumColors*sizeof(RGBQUAD)+ImgSize);
  	_lclose(hf); //關閉文件
    
  	if(NumColors!=0) //NumColors不為零,說明用到了調色板
  	{                    
    		//為邏輯調色板分配局部內存,大小為邏輯調色板結構長度加NumColors個PALETTENTRY大小
    		hPal=LocalAlloc(LHND,sizeof(LOGPALETTE) + NumColors* sizeof(PALETTEENTRY));
    
		//指針pPal指向該內存區
    		pPal =(LOGPALETTE *)LocalLock(hPal);

		//填寫邏輯調色板結構的頭
     		pPal->palNumEntries = NumColors;
     		pPal->palVersion    = 0x300;

    		//lpRGB指向的是調色板開始的位置
		lpRGB = (LPRGBQUAD)((LPSTR)lpImgData + (DWORD)sizeof(BITMAPINFOHEADER));

		//填寫每一項
		for (i = 0; i < NumColors; i++)
		{
			pPal->palPalEntry[i].peRed=lpRGB->rgbRed;
			pPal->palPalEntry[i].peGreen=lpRGB->rgbGreen;
			pPal->palPalEntry[i].peBlue=lpRGB->rgbBlue;
			pPal->palPalEntry[i].peFlags=(BYTE)0;
			lpRGB++; //指針移到下一項
		}

		//產生邏輯調色板,hPalette是一個全局變量
		hPalette=CreatePalette(pPal);

		//釋放局部內存
		LocalUnlock(hPal);
		LocalFree(hPal);
    }

    //獲得設備上下文句柄
    hDc=GetDC(hWnd);

    if(hPalette) //如果剛才產生了邏輯調色板
    {
	    //將新的邏輯調色板選入DC,將舊的邏輯調色板句柄保存在hPrevPalette
	    hPrevPalette=SelectPalette(hDc,hPalette,FALSE);
	    RealizePalette(hDc);
    }

    //產生位圖句柄
    hBitmap=CreateDIBitmap(hDc,	(LPBITMAPINFOHEADER)lpImgData, (LONG)CBM_INIT,
	    (LPSTR)lpImgData+sizeof(BITMAPINFOHEADER) +NumColors*sizeof(RGBQUAD),
	    (LPBITMAPINFO)lpImgData, DIB_RGB_COLORS);

    //將原來的調色板(如果有的話)選入設備上下文句柄
    if(hPalette && hPrevPalette)            
    {
	    SelectPalette(hDc,hPrevPalette,FALSE);
	    RealizePalette(hDc);
    }

    ReleaseDC(hWnd,hDc); //釋放設備上下文
    GlobalUnlock(hImgData); //解鎖內存區
    return TRUE; //成功返回
 }
*/
/* BOOL DIBShow(CFile* pFile)
 {
	BITMAPFILEHEADER bmfHeader;
	LPBITMAPINFOHEADER lpBMIH;
	int nCount, nSize;
	try 
	{
		nCount = pFile->Read((LPVOID) &bmfHeader, sizeof(BITMAPFILEHEADER));
		if(nCount != sizeof(BITMAPFILEHEADER)) {
			throw new CException;
		}
		if(bmfHeader.bfType != 0x4d42) {
			throw new CException;
		}
		nSize = bmfHeader.bfOffBits - sizeof(BITMAPFILEHEADER);
		lpBMIH = (LPBITMAPINFOHEADER) new char[nSize];
		//nBmihAlloc = m_nImageAlloc = crtAlloc;
		nCount = pFile->Read(m_lpBMIH, nSize); // info hdr & color table



		//ComputeMetrics();
		if(lpBMIH->biSize != sizeof(BITMAPINFOHEADER)) {
			TRACE("Not a valid Windows bitmap -- probably an OS/2 bitmap\n");
			throw new CException;
		}
		DWORD dwSizeImage = lpBMIH->biSizeImage;
		if(dwSizeImage == 0) {
			DWORD dwBytes = ((DWORD) lpBMIH->biWidth * lpBMIH->biBitCount) / 32;
			if(((DWORD) lpBMIH->biWidth * lpBMIH->biBitCount) % 32) {
				dwBytes++;
			}
			dwBytes *= 4;
			dwSizeImage = dwBytes * lpBMIH->biHeight; // no compression
		}
		LPVOID lpvColorTable = (LPBYTE) lpBMIH + sizeof(BITMAPINFOHEADER);


		//ComputePaletteSize(m_lpBMIH->biBitCount);
		if((lpBMIH == NULL) || (lpBMIH->biClrUsed == 0)) {
			switch(lpBMIH->biBitCount) {
				case 1:
					m_nColorTableEntries = 2;
					break;
				case 4:
					m_nColorTableEntries = 16;
					break;
				case 8:
					m_nColorTableEntries = 256;
					break;
				case 16:
				case 24:
				case 32:
					m_nColorTableEntries = 0;
					break;
				default:
					ASSERT(FALSE);
			}
		}
		else {
			m_nColorTableEntries = m_lpBMIH->biClrUsed;
		}
	ASSERT((m_nColorTableEntries >= 0) && (m_nColorTableEntries <= 256)); 


		MakePalette();
		m_lpImage = (LPBYTE) new char[m_dwSizeImage];
		nCount = pFile->Read(m_lpImage, m_dwSizeImage); // image only
	}

	catch(CException* pe) 
	{
		AfxMessageBox("Read error");
		pe->Delete();
		return FALSE;
	}
	return TRUE;
 }*/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
不卡一区二区三区四区| 欧美aⅴ一区二区三区视频| 亚洲欧美日韩在线| 裸体健美xxxx欧美裸体表演| av电影在线观看不卡| 欧美成人精品二区三区99精品| 国产精品不卡在线观看| 免费av成人在线| 欧美午夜宅男影院| 国产精品女主播av| 经典三级在线一区| 在线不卡a资源高清| 亚洲男人的天堂av| 成人av在线网站| 国产午夜精品在线观看| 日本中文一区二区三区| 欧美日韩国产色站一区二区三区| 国产精品私人自拍| 国产精一品亚洲二区在线视频| 美国欧美日韩国产在线播放| 成人97人人超碰人人99| 久久理论电影网| 麻豆精品国产传媒mv男同| 欧美精品黑人性xxxx| 一区二区三区在线视频播放| 色综合夜色一区| 中文字幕在线观看不卡视频| 国产精品亚洲专一区二区三区| 欧美一区二区三级| 日日骚欧美日韩| 欧美日韩精品一区二区三区蜜桃 | 亚洲自拍与偷拍| 91日韩在线专区| 亚洲欧洲一区二区三区| av网站免费线看精品| 自拍偷自拍亚洲精品播放| 99r国产精品| 亚洲精品日韩一| 日本精品视频一区二区| 亚洲美女视频在线| 色呦呦国产精品| 婷婷开心久久网| 91精品黄色片免费大全| 秋霞午夜av一区二区三区| 88在线观看91蜜桃国自产| 日韩成人av影视| 精品国产乱码久久| 国产成人鲁色资源国产91色综 | 欧美一级日韩免费不卡| 免费看欧美美女黄的网站| 精品国产91九色蝌蚪| 国产成人精品1024| 亚洲欧美国产三级| 欧美三级中文字幕| 国产在线观看免费一区| 中文字幕五月欧美| 欧美日韩一区二区在线视频| 免费观看一级欧美片| 欧美极品美女视频| 欧美三级韩国三级日本一级| 久久精品二区亚洲w码| 国产女人水真多18毛片18精品视频 | 亚洲综合久久久| 日韩一区二区在线观看| 豆国产96在线|亚洲| 亚洲日本va在线观看| 91精品国产综合久久蜜臀| 国产精品一区二区视频| 一区二区三区波多野结衣在线观看| 欧美丰满嫩嫩电影| 国产精品中文字幕日韩精品| 亚洲理论在线观看| 欧美一区二区三区白人| 99精品桃花视频在线观看| 日韩激情视频网站| 国产精品久久久久毛片软件| 91精品国产色综合久久| 成人免费高清视频| 日本不卡不码高清免费观看| 中文字幕一区二| 日韩一区二区视频| 91国偷自产一区二区使用方法| 国产主播一区二区| 亚洲福利视频导航| 国产精品丝袜黑色高跟| 91精品欧美久久久久久动漫| gogogo免费视频观看亚洲一| 激情综合色丁香一区二区| 一区二区三区资源| 国产欧美日韩卡一| 日韩精品一区二区三区三区免费| 色呦呦国产精品| 不卡一卡二卡三乱码免费网站| 久久91精品国产91久久小草| 视频在线观看一区二区三区| 亚洲私人黄色宅男| 国产色婷婷亚洲99精品小说| 久久综合色播五月| 日韩欧美电影一区| 欧美剧在线免费观看网站| 91片黄在线观看| 成人黄色国产精品网站大全在线免费观看 | 91精品啪在线观看国产60岁| 色哟哟精品一区| 国产不卡在线视频| 国产主播一区二区| 国产一区在线看| 国产一区二区三区国产| 麻豆国产精品视频| 免费人成精品欧美精品| 亚洲成av人片在线| 亚洲国产精品一区二区久久| 亚洲欧美另类久久久精品| 国产精品免费视频一区| 国产亚洲一区二区三区在线观看 | 欧美日韩aaa| 欧美日韩高清在线播放| 在线观看国产一区二区| 欧美亚洲高清一区二区三区不卡| 色婷婷综合久色| 色综合色综合色综合| 91老师片黄在线观看| 91丨porny丨户外露出| 91麻豆精品在线观看| 欧美在线免费视屏| 欧美美女一区二区在线观看| 在线不卡a资源高清| 欧美大黄免费观看| 久久久久国色av免费看影院| 国产女人18水真多18精品一级做| 国产午夜精品久久久久久免费视| 日本一区二区成人| 中文字幕视频一区| 亚洲va欧美va人人爽午夜 | 欧美一卡2卡3卡4卡| 日韩三级高清在线| 久久精品欧美一区二区三区不卡| 中文天堂在线一区| 亚洲人精品一区| 男女男精品网站| 成人免费视频一区| 欧美日韩中文另类| 精品国产区一区| 中文字幕在线观看不卡| 午夜视频一区二区| 国产一区二区三区高清播放| 96av麻豆蜜桃一区二区| 51精品久久久久久久蜜臀| 久久综合久色欧美综合狠狠| 国产精品久久久久久户外露出 | 国产精品国产自产拍高清av | 日韩午夜小视频| 国产精品福利在线播放| 亚洲国产成人91porn| 蜜桃av一区二区三区| 波多野结衣91| 日韩欧美精品在线视频| 亚洲视频你懂的| 精品一区二区三区在线视频| 99v久久综合狠狠综合久久| 欧美一级搡bbbb搡bbbb| 国产精品对白交换视频| 蜜桃视频在线一区| 色婷婷综合久久久中文一区二区| 欧美一级免费大片| 自拍av一区二区三区| 裸体歌舞表演一区二区| 色偷偷88欧美精品久久久 | 欧美三级日韩三级| 国产精品福利一区| 久久国产精品99久久久久久老狼| 99国产精品久久| 国产亚洲欧美日韩俺去了| 午夜不卡av在线| 91麻豆免费在线观看| 久久精品视频一区二区| 免费在线欧美视频| 欧美亚洲动漫精品| 1区2区3区精品视频| 国产精品18久久久久久久久| 欧美一区二区三区视频在线| 亚洲国产精品久久久久婷婷884| 国产精品亚洲午夜一区二区三区| 这里只有精品视频在线观看| 亚洲电影第三页| 日本韩国精品在线| 1000精品久久久久久久久| 国产激情视频一区二区三区欧美| 精品国产精品网麻豆系列| 首页国产欧美久久| 欧美电影影音先锋| 琪琪一区二区三区| 欧美日精品一区视频| 一区二区高清在线| 在线视频综合导航| 亚洲午夜三级在线| 欧美日韩中文一区| 视频在线在亚洲| 日韩一级免费一区| 久久不见久久见中文字幕免费|