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

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

?? dibapi.cpp

?? 圖像處理與識(shí)別實(shí)用案例精選 圖像處理與識(shí)別實(shí)用案例精選
?? CPP
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
		DWORD dwClrUsed;

		dwClrUsed = ((LPBITMAPINFOHEADER)lpbi)->biClrUsed;
		if (dwClrUsed != 0)
			return (WORD)dwClrUsed;
	}

	/*  Calculate the number of colors in the color table based on
	 *  the number of bits per pixel for the DIB.
	 */
	if (IS_WIN30_DIB(lpbi))
		wBitCount = ((LPBITMAPINFOHEADER)lpbi)->biBitCount;
	else
		wBitCount = ((LPBITMAPCOREHEADER)lpbi)->bcBitCount;

	/* return number of colors based on bits per pixel */
	switch (wBitCount)
	{
		case 1:
			return 2;

		case 4:
			return 16;

		case 8:
			return 256;

		default:
			return 0;
	}
}


//////////////////////////////////////////////////////////////////////////
//// Clipboard support

//---------------------------------------------------------------------
//
// Function:   CopyHandle (from SDK DibView sample clipbrd.c)
//
// Purpose:    Makes a copy of the given global memory block.  Returns
//             a handle to the new memory block (NULL on error).
//
//             Routine stolen verbatim out of ShowDIB.
//
// Parms:      h == Handle to global memory to duplicate.
//
// Returns:    Handle to new global memory block.
//
//---------------------------------------------------------------------

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;
}
void WINAPI ConvertShort(unsigned short *array, long length)
{
   unsigned long b1, b2;
   unsigned char *ptr;

   ptr = (unsigned char *)array;
   while (length--) {
      b1 = *ptr++;
      b2 = *ptr++;
      *array++ = (unsigned short)((b1 << 8) | (b2));
   }
}

void WINAPI ConvertLong(unsigned long  *array, long length)
{
   unsigned long b1, b2, b3, b4;
   unsigned char *ptr;

   ptr = (unsigned char *)array;
   while (length--) {
      b1 = *ptr++;
      b2 = *ptr++;
      b3 = *ptr++;
      b4 = *ptr++;
      *array++ = (b1 << 24) | (b2 << 16) | (b3 << 8) | (b4);
   }
}


/*************************************************************************
 *
 * SaveDIB()
 *
 * Saves the specified DIB into the specified CFile.  The CFile
 * is opened and closed by the caller.
 *
 * Parameters:
 *
 * HDIB hDib - Handle to the dib to save
 *
 * CFile& file - open CFile used to save DIB
 *
 * Return value: TRUE if successful, else FALSE or CFileException
 *
 *************************************************************************/


BOOL WINAPI SaveDIB(HDIB hDib, CFile& file)
{
	BITMAPFILEHEADER bmfHdr; // Header for Bitmap file
	LPBITMAPINFOHEADER lpBI;   // Pointer to DIB info structure
	DWORD dwDIBSize;

	if (hDib == NULL)
		return FALSE;

	/*
	 * Get a pointer to the DIB memory, the first of which contains
	 * a BITMAPINFO structure
	 */
	lpBI = (LPBITMAPINFOHEADER) ::GlobalLock((HGLOBAL) hDib);
	if (lpBI == NULL)
		return FALSE;

	if (!IS_WIN30_DIB(lpBI))
	{
		::GlobalUnlock((HGLOBAL) hDib);
		return FALSE;       // It's an other-style DIB (save not supported)
	}

	/*
	 * Fill in the fields of the file header
	 */

	/* Fill in file type (first 2 bytes must be "BM" for a bitmap) */
	bmfHdr.bfType = DIB_HEADER_MARKER;  // "BM"

	// Calculating the size of the DIB is a bit tricky (if we want to
	// do it right).  The easiest way to do this is to call GlobalSize()
	// on our global handle, but since the size of our global memory may have
	// been padded a few bytes, we may end up writing out a few too
	// many bytes to the file (which may cause problems with some apps).
	//
	// So, instead let's calculate the size manually (if we can)
	//
	// First, find size of header plus size of color table.  Since the
	// first DWORD in both BITMAPINFOHEADER and BITMAPCOREHEADER conains
	// the size of the structure, let's use this.

	dwDIBSize = *(LPDWORD)lpBI + ::PaletteSize((LPSTR)lpBI);  // Partial Calculation

	// Now calculate the size of the image

	if ((lpBI->biCompression == BI_RLE8) || (lpBI->biCompression == BI_RLE4))
	{
		// It's an RLE bitmap, we can't calculate size, so trust the
		// biSizeImage field

		dwDIBSize += lpBI->biSizeImage;
	}
	else
	{
		DWORD dwBmBitsSize;  // Size of Bitmap Bits only

		// It's not RLE, so size is Width (DWORD aligned) * Height

		dwBmBitsSize = WIDTHBYTES((lpBI->biWidth)*((DWORD)lpBI->biBitCount)) * lpBI->biHeight;

		dwDIBSize += dwBmBitsSize;

		// Now, since we have calculated the correct size, why don't we
		// fill in the biSizeImage field (this will fix any .BMP files which
		// have this field incorrect).

		lpBI->biSizeImage = dwBmBitsSize;
	}


	// Calculate the file size by adding the DIB size to sizeof(BITMAPFILEHEADER)

	bmfHdr.bfSize = dwDIBSize + sizeof(BITMAPFILEHEADER);
	bmfHdr.bfReserved1 = 0;
	bmfHdr.bfReserved2 = 0;

	/*
	 * Now, calculate the offset the actual bitmap bits will be in
	 * the file -- It's the Bitmap file header plus the DIB header,
	 * plus the size of the color table.
	 */
	bmfHdr.bfOffBits = (DWORD)sizeof(BITMAPFILEHEADER) + lpBI->biSize
											  + PaletteSize((LPSTR)lpBI);
#ifdef _MAC
	ByteSwapHeader(&bmfHdr);

	// First swap the size field
	*((LPDWORD)lpBI) = SWAPLONG(*((LPDWORD)lpBI));

	// Now swap the rest of the structure (we don't save < Win30 files)
	ByteSwapInfo((LPSTR)lpBI, TRUE);
#endif

	TRY
	{
		// Write the file header
		file.Write((LPSTR)&bmfHdr, sizeof(BITMAPFILEHEADER));
		//
		// Write the DIB header and the bits
		//
		file.WriteHuge(lpBI, dwDIBSize);
	}
	CATCH (CFileException, e)
	{
#ifdef _MAC
		// Swap everything back
		*((LPDWORD)lpBI) = SWAPLONG(*((LPDWORD)lpBI));
		ByteSwapInfo((LPSTR)lpBI, TRUE);
#endif
		::GlobalUnlock((HGLOBAL) hDib);
		THROW_LAST();
	}
	END_CATCH

#ifdef _MAC
	// Swap everything back
	*((LPDWORD)lpBI) = SWAPLONG(*((LPDWORD)lpBI));
	ByteSwapInfo((LPSTR)lpBI, TRUE);
#endif

	::GlobalUnlock((HGLOBAL) hDib);
	return TRUE;
}


/*************************************************************************

  Function:  ReadDIBFile (CFile&)

   Purpose:  Reads in the specified DIB file into a global chunk of
			 memory.

   Returns:  A handle to a dib (hDIB) if successful.
			 NULL if an error occurs.

  Comments:  BITMAPFILEHEADER is stripped off of the DIB.  Everything
			 from the end of the BITMAPFILEHEADER structure on is
			 returned in the global memory handle.

*************************************************************************/


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

	/*
	 * get length of DIB in bytes for use when reading
	 */

	dwBitsSize = file.GetLength();

	/*
	 * Go read the DIB file header and check if it's valid.
	 */
	if (file.Read((LPSTR)&bmfHeader, sizeof(bmfHeader)) != sizeof(bmfHeader))
		return NULL;

#ifdef _MAC
	ByteSwapHeader(&bmfHeader);
#endif
	if (bmfHeader.bfType != DIB_HEADER_MARKER)
		return NULL;

	/*
	 * Allocate memory for DIB
	 */
	hDIB = (HDIB) ::GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT, dwBitsSize);
	if (hDIB == 0)
	{
		return NULL;
	}
	pDIB = (LPSTR) ::GlobalLock((HGLOBAL) hDIB);

	/*
	 * Go read the bits.
	 */
	if (file.ReadHuge(pDIB, dwBitsSize - sizeof(BITMAPFILEHEADER)) !=
		dwBitsSize - sizeof(BITMAPFILEHEADER) )
	{
		::GlobalUnlock((HGLOBAL) hDIB);
		::GlobalFree((HGLOBAL) hDIB);
		return NULL;
	}
#ifdef _MAC
	// First swap the size field
	*((LPDWORD)pDIB) = SWAPLONG(*((LPDWORD)pDIB));

	// Now swap the rest of the structure
	ByteSwapInfo(pDIB, IS_WIN30_DIB(pDIB));
#endif
	::GlobalUnlock((HGLOBAL) hDIB);
	return hDIB;
}
//  add Nov.27,1999
HDIB WINAPI NewDIB(long width, long height,unsigned short biBitCount) // add "biBitCount" by hchen Jan 25,00
{
	long dwindth = (width*biBitCount/8+3)/4*4; // align 4 bytes
	WORD color_num;
	switch(biBitCount)
	{
		case 1:
			color_num=2;
			break;

		case 4:
			color_num=16;
			break;
		case 8:
			color_num=256;
			break;
		default:
			color_num=0;
			break;
	}

	long dwBitsSize = dwindth *height + 40 + color_num*4;// 40 LPBIMHEAD

	LPSTR pDIB;
	HDIB hDIB = (HDIB) ::GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT, dwBitsSize);
	if (hDIB == 0)
	{
		return NULL;
	}
	pDIB = (LPSTR) ::GlobalLock((HGLOBAL) hDIB);
	
	LPBITMAPINFO lpmf = (LPBITMAPINFO)pDIB;
	lpmf->bmiHeader.biSize = 40;//40
	lpmf->bmiHeader.biWidth = width; //i_info.width;
    lpmf->bmiHeader.biHeight = height;
    lpmf->bmiHeader.biPlanes = 1;
	lpmf->bmiHeader.biBitCount = biBitCount;// 24
	lpmf->bmiHeader.biCompression = 0;
    lpmf->bmiHeader.biSizeImage = dwindth *height;
	lpmf->bmiHeader.biXPelsPerMeter = 2925;
    lpmf->bmiHeader.biYPelsPerMeter = 2925;
    lpmf->bmiHeader.biClrUsed = 0; 
	lpmf->bmiHeader.biClrImportant= 0; 	

	if(color_num!=0)
	{
		for(int i=0;i<color_num;i++)
		{
			lpmf->bmiColors[i].rgbRed =(BYTE)i;
			lpmf->bmiColors[i].rgbGreen =(BYTE)i;
			lpmf->bmiColors[i].rgbBlue =(BYTE)i;
		}
	}

	::GlobalUnlock((HGLOBAL) hDIB);
	
	return hDIB;
}

#ifdef _MAC
void ByteSwapHeader(BITMAPFILEHEADER* bmfHeader)
{
	bmfHeader->bfType = SWAPWORD(bmfHeader->bfType);
	bmfHeader->bfSize = SWAPLONG(bmfHeader->bfSize);
	bmfHeader->bfOffBits = SWAPLONG(bmfHeader->bfOffBits);
}


void ByteSwapInfo(LPSTR lpHeader, BOOL fWin30Header)
{
	// Note this doesn't swap the bcSize/biSize field.  It assumes that the
	// size field was swapped during read or while setting the fWin30Header
	// flag.

	if (fWin30Header)
	{
		LPBITMAPINFOHEADER lpBMIH = &(LPBITMAPINFO(lpHeader)->bmiHeader);

		//lpBMIH->biSize = SWAPLONG(lpBMIH->biSize);
		lpBMIH->biWidth = SWAPLONG(lpBMIH->biWidth);
		lpBMIH->biHeight = SWAPLONG(lpBMIH->biHeight);
		lpBMIH->biPlanes = SWAPWORD(lpBMIH->biPlanes);
		lpBMIH->biBitCount = SWAPWORD(lpBMIH->biBitCount);
		lpBMIH->biCompression = SWAPLONG(lpBMIH->biCompression);
		lpBMIH->biSizeImage = SWAPLONG(lpBMIH->biSizeImage);
		lpBMIH->biXPelsPerMeter = SWAPLONG(lpBMIH->biXPelsPerMeter);
		lpBMIH->biYPelsPerMeter = SWAPLONG(lpBMIH->biYPelsPerMeter);
		lpBMIH->biClrUsed = SWAPLONG(lpBMIH->biClrUsed);
		lpBMIH->biClrImportant = SWAPLONG(lpBMIH->biClrImportant);
	}
	else
	{
		LPBITMAPCOREHEADER lpBMCH = &(LPBITMAPCOREINFO(lpHeader)->bmciHeader);

		lpBMCH->bcWidth = SWAPWORD(lpBMCH->bcWidth);
		lpBMCH->bcHeight = SWAPWORD(lpBMCH->bcHeight);
		lpBMCH->bcPlanes = SWAPWORD(lpBMCH->bcPlanes);
		lpBMCH->bcBitCount = SWAPWORD(lpBMCH->bcBitCount);
	}
}

#endif


?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99国产精品99久久久久久| 欧美成人国产一区二区| 91麻豆精品久久久久蜜臀| 久久久久久免费毛片精品| 亚洲乱码中文字幕| 国产a区久久久| 91精品国产欧美一区二区成人| 中文字幕欧美三区| 免费高清在线一区| 欧美性猛交xxxx黑人交| 国产精品每日更新在线播放网址 | 日本一区二区高清| 日韩国产在线观看一区| 色88888久久久久久影院按摩| 2020国产精品| 男男成人高潮片免费网站| 欧美在线视频你懂得| 国产精品久久久久久久久图文区| 久久精品久久精品| 91精品国产综合久久久久久| 亚洲精品国产一区二区三区四区在线| 国产成人免费视频| 精品国产露脸精彩对白| 欧美bbbbb| 欧美性受xxxx黑人xyx| 亚洲女同女同女同女同女同69| 国产黑丝在线一区二区三区| 精品精品国产高清a毛片牛牛| 青青草原综合久久大伊人精品 | 久热成人在线视频| 国产在线一区观看| 免费人成在线不卡| 成人国产精品免费网站| 欧美性猛交xxxxxxxx| 久久久蜜桃精品| 亚洲乱码日产精品bd| 美女视频黄a大片欧美| 波多野结衣欧美| 制服丝袜中文字幕一区| 中文字幕在线播放不卡一区| 天堂久久一区二区三区| 国产91在线观看丝袜| 国产成人欧美日韩在线电影| 7777精品伊人久久久大香线蕉的| 日韩成人午夜精品| 欧美mv日韩mv国产| 国产激情一区二区三区桃花岛亚洲| 久久久久久免费毛片精品| 粉嫩av一区二区三区在线播放| 精品电影一区二区| 成a人片国产精品| 亚洲伦理在线免费看| 制服丝袜日韩国产| 国产美女主播视频一区| 国产精品国产三级国产aⅴ中文 | 亚洲精品国久久99热| 欧美日韩高清在线播放| 精品一区精品二区高清| 欧美韩国一区二区| 欧美午夜电影网| 久久精品国产99国产| 国产精品日韩成人| 欧美中文字幕亚洲一区二区va在线 | 色综合久久中文字幕综合网| 亚洲久本草在线中文字幕| 欧美精品tushy高清| 九一九一国产精品| 亚洲精品高清在线| 91麻豆精品国产| 国产成人99久久亚洲综合精品| 一区二区三区不卡视频在线观看| 欧美一区二区观看视频| 99久久国产综合精品麻豆| 图片区小说区区亚洲影院| 久久精品一区二区三区不卡| 欧美中文字幕一区| 粉嫩一区二区三区性色av| 亚洲成人精品影院| 国产精品久久久久久久蜜臀 | 天天av天天翘天天综合网| 26uuu亚洲综合色| 欧美在线一二三四区| 国产精品一区二区久久精品爱涩| 亚洲一本大道在线| 国产精品久久久久久久久图文区 | 中文字幕成人网| 99视频精品全部免费在线| 亚洲视频一二三| 欧美视频一区二| 蜜臂av日日欢夜夜爽一区| 久久网站热最新地址| 国产成人精品三级| 亚洲天堂福利av| 欧美三级中文字幕| 久久丁香综合五月国产三级网站| 精品久久久久香蕉网| 成人av在线影院| 亚洲电影一区二区三区| 欧美一级二级在线观看| 国产精品538一区二区在线| 中文字幕日本不卡| 欧美人体做爰大胆视频| 精品影视av免费| 中文字幕一区三区| 欧美日本一区二区在线观看| 国产一区二区三区在线观看免费| 国产精品天美传媒| 777色狠狠一区二区三区| 国产精品18久久久久久久网站| 亚洲欧美成人一区二区三区| 欧美日韩三级视频| 成人综合婷婷国产精品久久蜜臀 | 日本伊人精品一区二区三区观看方式| 精品国产自在久精品国产| 99视频有精品| 久久福利视频一区二区| 一区二区三区在线视频观看| 精品国产一二三区| 欧日韩精品视频| 丁香婷婷综合激情五月色| 日韩成人免费电影| 中文字幕在线一区| 精品久久国产字幕高潮| 在线免费观看成人短视频| 国产成人av电影免费在线观看| 亚洲一二三四区| 中文久久乱码一区二区| 欧美一级欧美一级在线播放| 成人av在线播放网站| 久久99国产精品免费| 亚洲一本大道在线| 亚洲男人的天堂一区二区| 中文一区一区三区高中清不卡| 欧美一区二区三区日韩视频| 色天使久久综合网天天| 丁香桃色午夜亚洲一区二区三区| 日韩综合小视频| 亚洲第一福利视频在线| 樱花草国产18久久久久| 国产欧美一区二区精品秋霞影院| 欧美一卡2卡3卡4卡| 欧美日韩亚洲另类| 欧美日韩久久不卡| 欧美性淫爽ww久久久久无| 99国产精品99久久久久久| 成人av在线资源| 成人精品国产福利| 成人不卡免费av| 成人av第一页| 成人国产在线观看| 99免费精品在线| 99国产精品国产精品久久| 91在线观看视频| 91精品办公室少妇高潮对白| 91麻豆国产香蕉久久精品| 99久久精品国产麻豆演员表| 成人激情小说乱人伦| 91在线免费视频观看| 91丨porny丨在线| 在线免费观看成人短视频| 欧美色网站导航| 91精品综合久久久久久| 欧美一区二区三区人| 日韩精品一区二区三区在线| 久久久久久久久伊人| 欧美国产97人人爽人人喊| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 国产精品网站一区| 亚洲欧美另类综合偷拍| 午夜日韩在线电影| 极品美女销魂一区二区三区免费| 国产尤物一区二区| 99国产精品久久久久久久久久久| 色国产精品一区在线观看| 91麻豆精品国产91| 国产精品热久久久久夜色精品三区 | 日韩美女视频一区二区在线观看| 欧美成人女星排名| 国产精品三级av| 天天影视网天天综合色在线播放| 国产在线精品一区在线观看麻豆| 成人sese在线| 欧美日韩精品一区二区| 久久av资源站| 喷水一区二区三区| 免费高清在线视频一区·| 波多野洁衣一区| 久久精品一区二区三区不卡牛牛| 午夜视频一区二区| 日本道在线观看一区二区| 国产精品色噜噜| 欧美一区二区精品久久911| 久久精品夜色噜噜亚洲a∨| 亚洲精品乱码久久久久久久久 | 中文字幕亚洲视频| 亚洲一区二区三区三| 国产精品三级在线观看| 国产一区二区三区在线观看免费| 日韩欧美视频一区| 奇米在线7777在线精品|