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

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

?? myfile.cpp

?? C:Documents and SettingsAdministrator桌面VC++多媒體特效制作百例CHAR03DisplayDIB
?? CPP
字號:
//  myfile.cpp
//
//  Source file for Device-Independent Bitmap (DIB) API.  Provides
//  the following functions:
//
//  SaveDIB()           - Saves the specified dib in a file
//  ReadDIBFile()       - Loads a DIB from a file
//
//
// This is a part of the Microsoft Foundation Classes C++ library.
// Copyright (C) 1992 Microsoft Corporation
// All rights reserved.
//
// This source code is only intended as a supplement to the
// Microsoft Foundation Classes Reference and Microsoft
// QuickHelp and/or WinHelp documentation provided with the library.
// See these sources for detailed information regarding the
// Microsoft Foundation Classes product.

#include "stdafx.h"
#include <math.h>
#include <io.h>
#include <direct.h>
#include "dibapi.h"

/*
 * Dib Header Marker - used in writing DIBs to files
 */
#define DIB_HEADER_MARKER   ((WORD) ('M' << 8) | 'B')

#ifdef _MAC
#define SWAPWORD(x) MAKEWORD(HIBYTE(x), LOBYTE(x))
#define SWAPLONG(x) MAKELONG(SWAPWORD(HIWORD(x)), SWAPWORD(LOWORD(x)))
void ByteSwapHeader(BITMAPFILEHEADER* bmiHeader);
void ByteSwapInfo(LPSTR lpHeader, BOOL fWin30Header);
#endif

/*************************************************************************
 *
 * 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;
}


#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

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美成人精品高清在线播放 | 91精品午夜视频| 91蝌蚪porny九色| 高清av一区二区| 国产精品香蕉一区二区三区| 国产真实乱对白精彩久久| 蜜桃在线一区二区三区| 蜜臀av性久久久久蜜臀aⅴ四虎| 亚洲成av人片一区二区三区| 一区二区三区波多野结衣在线观看| 国产精品国产三级国产专播品爱网 | 亚洲欧美一区二区不卡| 欧美国产精品v| 亚洲国产精品精华液ab| 国产精品九色蝌蚪自拍| 亚洲精品免费看| 亚洲自拍另类综合| 日韩在线a电影| 国产综合色产在线精品| 国产露脸91国语对白| 岛国精品在线观看| 一本久久a久久免费精品不卡| 欧美主播一区二区三区| 在线不卡免费欧美| 日韩欧美在线影院| 国产欧美一二三区| 亚洲黄色片在线观看| 亚洲电影激情视频网站| 秋霞电影网一区二区| 国产剧情av麻豆香蕉精品| 3atv一区二区三区| 日韩一区二区精品在线观看| 2023国产精品自拍| 136国产福利精品导航| 一区二区三区 在线观看视频| 日日欢夜夜爽一区| 国产成人无遮挡在线视频| 亚洲蜜臀av乱码久久精品蜜桃| 亚洲伊人伊色伊影伊综合网| thepron国产精品| 国产在线看一区| 99久久婷婷国产综合精品电影| 91在线视频18| 久久久噜噜噜久噜久久综合| 国产精品视频看| 久久er99精品| 91福利社在线观看| 精品国产乱码久久久久久久| 久久久久久一级片| 国产精品入口麻豆原神| 亚洲免费观看高清完整版在线观看| 亚洲免费观看高清| 免费人成在线不卡| av色综合久久天堂av综合| 欧美日韩一二区| 久久精品人人做人人爽97| 性感美女久久精品| 国产91综合网| 欧美精品v国产精品v日韩精品 | 亚洲国产精品欧美一二99| 一区二区三区蜜桃| 色悠悠亚洲一区二区| 色婷婷av一区二区三区大白胸| 亚洲精品一区二区在线观看| 亚洲国产精品尤物yw在线观看| 久久久久久久久久久久久久久99| 欧美精品一卡两卡| 亚洲国产成人私人影院tom| 蜜臀av性久久久久蜜臀aⅴ四虎| 久久亚洲影视婷婷| 国产精品国产三级国产专播品爱网| 在线亚洲+欧美+日本专区| 欧美成人国产一区二区| 亚洲一区二区三区四区在线观看 | 成人性生交大片免费看视频在线| 色88888久久久久久影院野外| 久久久久久**毛片大全| 日本亚洲天堂网| 26uuu国产电影一区二区| 亚洲一区二区欧美| 99久久99精品久久久久久| 一区二区三区四区在线免费观看| 波多野洁衣一区| 不卡的电影网站| 精品91自产拍在线观看一区| 亚洲国产欧美在线人成| 91在线视频官网| 中文字幕va一区二区三区| 麻豆精品新av中文字幕| 欧美日韩午夜在线视频| 国产宾馆实践打屁股91| 久久久不卡网国产精品一区| 五月天激情综合网| 91行情网站电视在线观看高清版| 国产精品欧美一区二区三区| 国产乱码精品一区二区三| 欧美电影免费观看高清完整版| 视频一区在线播放| 欧美日韩dvd在线观看| 亚洲一区二区成人在线观看| 色噜噜夜夜夜综合网| 亚洲人成网站精品片在线观看| av电影在线观看完整版一区二区| 欧美韩国日本不卡| 国产精品一区二区男女羞羞无遮挡 | 亚洲欧美一区二区不卡| 99久久夜色精品国产网站| 日韩成人午夜精品| 日韩精品一区二区三区视频在线观看| 日本不卡不码高清免费观看| 亚洲国产另类av| 欧美疯狂性受xxxxx喷水图片| 美腿丝袜亚洲色图| 中文字幕二三区不卡| 亚洲美女电影在线| 在线视频中文字幕一区二区| 亚洲一区二区黄色| 欧美一区二区三区不卡| 久久99精品久久久久久动态图| 精品国产一区二区国模嫣然| 国产又黄又大久久| 中文字幕不卡在线| 色综合久久九月婷婷色综合| 亚洲午夜三级在线| 日韩欧美中文字幕一区| 久久国产三级精品| 国产亚洲一区二区三区在线观看| 成人一区二区在线观看| 日韩毛片高清在线播放| 在线观看视频一区二区| 日韩国产精品大片| 国产三级精品在线| 91美女片黄在线| 亚洲午夜久久久久久久久久久| 欧美一级二级三级乱码| 国产精品一二二区| 亚洲免费观看高清完整版在线观看 | 蜜桃精品在线观看| 久久久精品天堂| 一本大道av伊人久久综合| 亚洲v日本v欧美v久久精品| 欧美成人精品高清在线播放| 成人av资源站| 天天综合天天做天天综合| 久久久亚洲国产美女国产盗摄| 不卡在线观看av| 亚洲大片免费看| 久久婷婷久久一区二区三区| 一本久道中文字幕精品亚洲嫩| 日韩精品一区第一页| 欧美激情中文字幕一区二区| 欧美日韩视频不卡| 国产成人免费视频网站高清观看视频| 亚洲综合无码一区二区| 精品成人私密视频| 欧美性高清videossexo| 国产成人免费网站| 日本成人在线网站| 亚洲日本乱码在线观看| 日韩欧美国产精品一区| 99精品视频在线观看| 日韩中文字幕区一区有砖一区| 男女男精品网站| 欧美videos中文字幕| 不卡在线视频中文字幕| 青青草一区二区三区| 亚洲丝袜自拍清纯另类| 欧美成人性福生活免费看| 色香蕉成人二区免费| 国产精品亚洲第一| 日本不卡123| 亚洲综合久久av| 国产精品久久二区二区| 精品国产三级a在线观看| 欧美写真视频网站| 成人av网站免费| 国产一区二区女| 蜜桃久久久久久久| 五月婷婷色综合| 亚洲综合色婷婷| 国产精品第一页第二页第三页| 精品国产一区二区三区久久久蜜月 | 丝袜美腿高跟呻吟高潮一区| 亚洲欧洲av在线| 久久久99久久| 日韩一卡二卡三卡四卡| 欧美日韩一二三区| 91极品视觉盛宴| 97精品国产97久久久久久久久久久久| 国产一区二区日韩精品| 男女男精品视频| 午夜久久福利影院| 亚洲国产精品影院| 亚洲一区二区影院| 伊人色综合久久天天| 亚洲人成小说网站色在线| 国产精品久久久久久久久果冻传媒| 精品成人a区在线观看| 日韩欧美色电影| 日韩一级免费一区|