⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 imagebmp.cpp

📁 很珍贵得视频编辑器原码及CODEC。需要安装下列CODEC.可播放多种格式的视频
💻 CPP
字号:
// ImageBmp.cpp: implementation of the IEDib class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "IEDib.h"

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

/*********************************************************
typedef struct tagBITMAPFILEHEADER { // bmfh 
    WORD    bfType;			// 厚飘甘阑 钎矫 (亲惑 "BM")
    DWORD   bfSize;			// 傈眉 颇老 农扁
    WORD    bfReserved1;	// 抗距等 蔼
    WORD    bfReserved2;	// 抗距等 蔼
    DWORD   bfOffBits;		// 角力 捞固瘤 厚飘鳖瘤狼 可悸
} BITMAPFILEHEADER; 

typedef struct tagBITMAPINFOHEADER{ // bmih 
    DWORD  biSize;			// 捞 备炼眉狼 农扁
    LONG   biWidth;			// 捞固瘤狼 气 (侨伎 窜困)
    LONG   biHeight;		// 捞固瘤狼 臭捞 (侨伎 窜困)
    WORD   biPlanes;		// 厚飘敲饭牢 荐 (亲惑 1)
    WORD   biBitCount		// 侨伎 寸 厚飘 荐
    DWORD  biCompression;	// 拘绵 蜡屈
    DWORD  biSizeImage;		// 捞固瘤狼 农扁(官捞飘 荐)
    LONG   biXPelsPerMeter;	// 啊肺 秦惑档
    LONG   biYPelsPerMeter; // 技肺 秦惑档
    DWORD  biClrUsed;		// 角力 荤侩登绰 祸惑 荐
    DWORD  biClrImportant;	// 吝夸茄 祸惑 牢郸胶 (0捞搁 傈眉)
} BITMAPINFOHEADER; 
*********************************************************/

// BMP 颇老阑 阂矾坷扁
BOOL IEDib::LoadBMP(LPCTSTR lpszFileName)
{
	CFile file;
	DWORD dwDibSize;
	LPSTR lpDib;
	BITMAPFILEHEADER bmfh;
	
	// 佬扁 葛靛肺 颇老 凯扁
	if( !file.Open(lpszFileName, CFile::modeRead) )
		return FALSE;

	// 颇老 庆歹 佬扁
	if( file.Read((LPSTR)&bmfh, sizeof(BITMAPFILEHEADER)) != sizeof(BITMAPFILEHEADER) )
	{
		file.Close();
		return FALSE;
	}

	// BMP 颇老烙阑 唱鸥郴绰 "BM" 付目啊 乐绰瘤 犬牢
	if( bmfh.bfType != ((WORD) ('M' << 8) | 'B') )
	{
		file.Close();
		return FALSE;
	}

	// packed-DIB 皋葛府 喉钒狼 农扁
	dwDibSize = bmfh.bfSize - sizeof(BITMAPFILEHEADER);
	
	// 皋葛府 且寸
	if( (m_hDib = (HGLOBAL)::GlobalAlloc(GHND, dwDibSize)) == NULL ) 
	{
		file.Close();
		return FALSE;
	}

	// 皋葛府 绊沥
	if( (lpDib = (LPSTR)::GlobalLock((HGLOBAL)m_hDib)) == NULL )
	{
		::GlobalFree( m_hDib );
		m_hDib = NULL;
		file.Close();
		return FALSE;
	}

	// 颇老肺何磐 Packed-DIB 农扁父怒阑 佬扁
	if( file.ReadHuge(lpDib, dwDibSize) != dwDibSize ) 
	{
		::GlobalUnlock( m_hDib );
		::GlobalFree( m_hDib );
		m_hDib = NULL;
		file.Close();
		return FALSE;
	}

	// IEDib 糕滚 函荐 檬扁拳
	if( !InitDib(lpDib) )
	{
		::GlobalUnlock( m_hDib );
		::GlobalFree( m_hDib );
		m_hDib = NULL;
		file.Close();
		return FALSE;
	}

	// BMP 颇老 肺靛啊 己傍利栏肺 场巢.
	::GlobalUnlock((HGLOBAL) m_hDib);
	file.Close();
	return TRUE;
}

// BMP 颇老肺 历厘窍扁
BOOL IEDib::SaveBMP(LPCTSTR lpszFileName)
{
	CFile file;
	LPSTR lpDib;
	BITMAPFILEHEADER bmfh;
	LPBITMAPINFOHEADER lpbmi;

	if( m_hDib == NULL )
		return FALSE;

	// 静扁 葛靛肺 颇老 凯扁
	if( !file.Open(lpszFileName, CFile::modeCreate | CFile::modeWrite | CFile::shareDenyWrite) )
		return FALSE;

	// 皋葛府 绊沥
	lpDib = (LPSTR)::GlobalLock( m_hDib );
	if( lpDib == NULL )
		return FALSE;

	lpbmi = (LPBITMAPINFOHEADER)lpDib;

	// 荤侩登绰 祸惑 荐
	int nColors = GetColorNums();

	// 厚飘甘 颇老 庆歹 沥焊 汲沥
	bmfh.bfType      = ((WORD) ('M' << 8) | 'B');	// is always "BM"
	bmfh.bfSize		 = GlobalSize( m_hDib ) + sizeof(bmfh);
	bmfh.bfReserved1 = 0;
	bmfh.bfReserved2 = 0;
	bmfh.bfOffBits	 = (DWORD)( sizeof(bmfh) + lpbmi->biSize + nColors * sizeof(RGBQUAD) );

	// BITMAPFILEHEADER 静扁 
	file.Write( &bmfh, sizeof(bmfh) );

	// BITMAPINFOHEADER + PALETTE TABLE + RAW DATA 静扁
	file.Write( lpDib, GlobalSize( m_hDib ) );

	// 颇老 摧扁
	file.Close();

	// 绊沥等 皋葛府 喉钒阑 秦力
	::GlobalUnlock( m_hDib );

	return TRUE;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -