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

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

?? dibshow.cpp

?? 《VC數字圖處理典型算法以及實現》第12章的對應源代碼
?? 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一区二区三区免费野_久草精品视频
亚洲一区二区三区小说| 一区二区三区日韩精品| 欧美伦理电影网| 色综合久久综合网| 在线一区二区三区做爰视频网站| 成人小视频免费在线观看| 国产美女一区二区| 国产成人精品一区二区三区四区| 国精产品一区一区三区mba视频| 久久99国内精品| 国内精品免费在线观看| 黄色资源网久久资源365| 国产尤物一区二区| 成人一二三区视频| 91最新地址在线播放| 91美女在线看| 欧洲av一区二区嗯嗯嗯啊| 欧美日韩久久不卡| 日韩视频在线一区二区| 精品国产乱码久久久久久闺蜜| 久久婷婷一区二区三区| 国产女主播在线一区二区| 亚洲欧洲成人自拍| 亚洲一区二区四区蜜桃| 欧美aⅴ一区二区三区视频| 免播放器亚洲一区| 国产成人午夜99999| 色哟哟日韩精品| 欧美久久久久久久久久| 久久综合九色综合欧美98| 亚洲国产精品激情在线观看| 亚洲资源中文字幕| 国产综合色精品一区二区三区| 粉嫩aⅴ一区二区三区四区| 一本高清dvd不卡在线观看| 7777精品伊人久久久大香线蕉| 欧美大白屁股肥臀xxxxxx| 国产精品三级av在线播放| 亚洲一区二区三区免费视频| 美女看a上一区| 色狠狠av一区二区三区| 精品国产欧美一区二区| 亚洲精品亚洲人成人网在线播放| 日本女优在线视频一区二区| 懂色av一区二区三区免费观看 | 欧美日韩国产高清一区| 精品久久一区二区| 亚洲人妖av一区二区| 美女视频黄 久久| 色综合久久中文综合久久97| 2021中文字幕一区亚洲| 五月天网站亚洲| 99久久精品费精品国产一区二区| 欧美一区二区三区日韩视频| 自拍偷在线精品自拍偷无码专区| 日本欧美大码aⅴ在线播放| 日本精品免费观看高清观看| 久久五月婷婷丁香社区| 视频一区二区三区入口| 成人av在线影院| 欧美tk丨vk视频| 日日摸夜夜添夜夜添精品视频| 97精品久久久午夜一区二区三区 | 自拍偷自拍亚洲精品播放| 蜜臀av国产精品久久久久 | 麻豆91免费看| 欧美老肥妇做.爰bbww| 亚洲精品中文在线影院| 91网站在线观看视频| 国产情人综合久久777777| 韩国一区二区在线观看| 91精品国产欧美一区二区成人| 亚洲精品乱码久久久久久黑人| 处破女av一区二区| 国产精品你懂的| 成人毛片在线观看| 国产精品久久久久影院亚瑟| 国产成人免费网站| 中文字幕欧美日韩一区| 色先锋aa成人| 亚洲精品乱码久久久久久黑人 | 色一情一伦一子一伦一区| 中文字幕一区二区三区在线观看| 成人免费高清在线| 国产精品丝袜在线| 91社区在线播放| 亚洲精品综合在线| 欧美日韩国产三级| 日本不卡视频在线观看| 日韩一级视频免费观看在线| 免费在线观看一区| 国产区在线观看成人精品| 成人免费黄色在线| 亚洲一区二区四区蜜桃| 91精品久久久久久久91蜜桃| 精品影院一区二区久久久| 欧美精品一区二区三区蜜桃| 国产成人av在线影院| 日韩理论电影院| 精品视频123区在线观看| 免费观看30秒视频久久| 国产欧美一区二区精品性色| 一本久久a久久精品亚洲| 丝袜诱惑亚洲看片| 国产欧美日韩视频一区二区| 97久久精品人人澡人人爽| 午夜精品久久久久久久蜜桃app| 欧美一区二区三区四区高清| 国产91精品精华液一区二区三区 | 久久综合狠狠综合久久激情| 不卡欧美aaaaa| 亚洲国产一区二区视频| 久久久久久综合| 欧美亚洲高清一区| 国产麻豆日韩欧美久久| 一区二区三区高清不卡| 欧美精品一区二区三区在线播放| a美女胸又www黄视频久久| 首页亚洲欧美制服丝腿| 欧美国产日韩亚洲一区| 91精品国产综合久久久蜜臀图片| 国产成人自拍网| 日韩专区一卡二卡| 国产精品成人免费精品自在线观看| 欧美日韩国产一级| 成人免费高清视频| 久久不见久久见中文字幕免费| 亚洲欧美偷拍另类a∨色屁股| 日韩美女天天操| 欧美体内she精高潮| 成人免费毛片嘿嘿连载视频| 日本成人在线电影网| 亚洲欧美日韩国产综合| 久久这里只有精品6| 91精品国产高清一区二区三区| 99精品欧美一区二区蜜桃免费| 麻豆国产一区二区| 偷拍日韩校园综合在线| 亚洲欧美偷拍另类a∨色屁股| 国产亚洲成av人在线观看导航| 欧美精品三级在线观看| 国产成人精品网址| 国内成人精品2018免费看| 无码av免费一区二区三区试看| 亚洲视频狠狠干| 一区视频在线播放| 国产精品视频线看| 国产色综合久久| 日韩精品久久理论片| 一区二区三区四区激情| 国产精品麻豆久久久| 国产精品人妖ts系列视频| 久久精品夜色噜噜亚洲a∨ | 国产成人av福利| 韩国精品主播一区二区在线观看 | 欧美日韩在线播放| 欧美亚洲综合网| 欧洲生活片亚洲生活在线观看| caoporm超碰国产精品| 成人午夜电影久久影院| 成人精品一区二区三区四区| 成人做爰69片免费看网站| 99视频超级精品| 91免费国产在线| 在线一区二区三区做爰视频网站| 日本二三区不卡| 欧美日韩三级视频| 91精品国产综合久久蜜臀| 精品电影一区二区| 久久久久久亚洲综合| 日本一区二区高清| 亚洲男人的天堂在线aⅴ视频| 亚洲少妇中出一区| 婷婷成人激情在线网| 美女www一区二区| 国产suv一区二区三区88区| 成人黄色网址在线观看| 一本到一区二区三区| 91精品国产综合久久蜜臀| 精品区一区二区| 中文字幕一区不卡| 日韩精品久久理论片| 国产精品一区二区三区网站| av在线不卡免费看| 欧美日本一区二区三区| 久久这里只精品最新地址| 国产欧美日产一区| 亚洲国产精品天堂| 国内久久婷婷综合| 在线欧美小视频| 欧美sm美女调教| 亚洲乱码国产乱码精品精的特点| 亚洲网友自拍偷拍| 精品一区二区三区久久久| 91亚洲精品久久久蜜桃| 欧美顶级少妇做爰| 国产精品污网站| 视频在线在亚洲| av电影在线观看完整版一区二区| 欧美福利视频一区|