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

📄 mydib.cpp

📁 Screen Chatting source
💻 CPP
字号:
//MYDIB.CPP BMP 拳老阑 免仿窍绰 努贰胶

#include "stdafx.h"
#include "mydib.h"


//积己磊 拳老疙阑 林绢辑 努贰胶啊 父甸绢瘤搁辑 捞固瘤甫 啊瘤绊 
//乐霸 茄促.
CMyDib::CMyDib(LPSTR filename)
{
	//拳老疙阑 m_strFileName俊 扁废茄促.
	lstrcpy((LPSTR)m_strFileName,(LPSTR)filename);
	//捞固瘤 器牢磐客 滚欺甫 null肺 汲沥茄促.
	szDib=NULL;
    lpDib=NULL;
	m_palDIB=NULL;
	//迫饭飘甫 null肺 汲沥茄促.
	szPal=NULL;
	//bmp 拳老阑 肺靛矫挪促.
	if(!bLoadBmpFile())
	{
        AfxMessageBox(m_strMessageTemp);
		ExitProcess(1); 
	}
}

//积己磊 拳老疙阑 林绢辑 努贰胶啊 父甸绢瘤搁辑 捞固瘤甫 啊瘤绊 
//乐霸 茄促.
CMyDib::CMyDib()
{
	//拳老疙阑 m_strFileName俊 扁废茄促.
//	lstrcpy((LPSTR)m_strFileName,(LPSTR)filename);
	//捞固瘤 器牢磐客 滚欺甫 null肺 汲沥茄促.
	szDib=NULL;
    lpDib=NULL;
	m_palDIB=NULL;
	//迫饭飘甫 null肺 汲沥茄促.
	szPal=NULL;
	//bmp 拳老阑 肺靛矫挪促.
/*	if(!bLoadBmpFile())
	{
        AfxMessageBox(m_strMessageTemp);
		ExitProcess(1); 
	}*/
}
CMyDib::~CMyDib()
{
	if(szDib)
	{
		::GlobalUnlock(szDib);
		::GlobalFree(szDib);
	}
	if(m_palDIB)
		delete m_palDIB;
	if(szPal)
	{
		::GlobalUnlock((HGLOBAL) szPal);
		::GlobalFree((HGLOBAL) szPal);
	}

}
BOOL CMyDib::bLoadBmpFile()
{
	HFILE bmpFile;

	//拳老阑 楷促.
	bmpFile=_lopen((LPSTR)m_strFileName,OF_READ);

	if(bmpFile<0)
	{
		sprintf(m_strMessageTemp,"%s 拳老捞 绝嚼聪促",m_strFileName);
	   return FALSE;
	}
	//bmpHeder 备炼眉俊 BMPHEADER 庆歹 沥焊甫 佬绢 柯促.
	if(_lread(bmpFile,(LPSTR)&bmpHeader,sizeof(bmpHeader))!=sizeof(bmpHeader))
	{
		sprintf(m_strMessageTemp,"%s BMPHEADER 甫 佬阑荐 绝嚼聪促!",m_strFileName);
		return FALSE;
	}
	//拳老捞 bmp 老版快俊绰 拳老 贸澜俊 "BM"捞扼绊 汲沥秦乐澜
	if (bmpHeader.bfType != DIB_HEADER_MARKER)
	{
		sprintf(m_strMessageTemp,"%s BMP 拳老捞 酒凑聪促.",m_strFileName);
		return FALSE;
	}
	//捞固瘤 单捞鸥 农府父怒 皋葛府甫 汲沥茄促.
	szDib =::GlobalAlloc(GHND,bmpHeader.bfSize);
	if(szDib==NULL)
	{
		sprintf(m_strMessageTemp,"%s 皋葛府啊 何练钦聪促.",m_strFileName);
		return FALSE;
	}
	//捞固瘤 单捞鸥 滚欺甫 牧飘费 且荐 乐档废 lpDip 俊 遏欧茄促.
	lpDib=(LPSTR)::GlobalLock(szDib);
	 UINT len;
	 //捞固瘤 单捞鸥甫 佬绰促.
	if((len=_lread(bmpFile,(LPSTR)lpDib,bmpHeader.bfSize-sizeof(bmpHeader)))!=bmpHeader.bfSize-sizeof(bmpHeader))
	{
		::GlobalUnlock(szDib);
		::GlobalFree(szDib);
		szDib=NULL;
		lpDib=NULL;
		sprintf(m_strMessageTemp,"%s 拳老阑 佬阑荐 绝嚼聪促.",m_strFileName);
		return FALSE;
	}
    bmpInfoHeader = (LPBITMAPINFOHEADER)lpDib;
	bmcInfoHeader = (LPBITMAPCOREHEADER)lpDib;
	bmpInfo =(LPBITMAPINFO)lpDib;
	bmcInfo = (LPBITMAPCOREINFO)lpDib;
	bCreatePalette();
	_lclose(bmpFile);
 return TRUE;
}

BOOL CMyDib::bLoadBmpBuffer(BITMAPFILEHEADER *pBmpFileHeader,HANDLE hDIB)
{
//	HFILE bmpFile;

	//拳老阑 楷促.
//	bmpFile=_lopen((LPSTR)m_strFileName,OF_READ);
/*
	if(bmpFile<0)
	{
		sprintf(m_strMessageTemp,"%s 拳老捞 绝嚼聪促",m_strFileName);
	   return FALSE;
	}
	//bmpHeder 备炼眉俊 BMPHEADER 庆歹 沥焊甫 佬绢 柯促.
//	if(_lread(bmpFile,(LPSTR)&bmpHeader,sizeof(bmpHeader))!=sizeof(bmpHeader))
	{
		sprintf(m_strMessageTemp,"%s BMPHEADER 甫 佬阑荐 绝嚼聪促!",m_strFileName);
		return FALSE;
	}*/
	memcpy(&bmpHeader,pBmpFileHeader,sizeof(BITMAPFILEHEADER));
/*	//拳老捞 bmp 老版快俊绰 拳老 贸澜俊 "BM"捞扼绊 汲沥秦乐澜
	if (bmpHeader.bfType != DIB_HEADER_MARKER)
	{
		sprintf(m_strMessageTemp,"%s BMP 拳老捞 酒凑聪促.",m_strFileName);
		return FALSE;
	}*/
	//捞固瘤 单捞鸥 农府父怒 皋葛府甫 汲沥茄促.
	szDib =::GlobalAlloc(GHND,pBmpFileHeader->bfSize);
	if(szDib==NULL)
	{
		sprintf(m_strMessageTemp,"%s 皋葛府啊 何练钦聪促.",m_strFileName);
		return FALSE;
	}
	//捞固瘤 单捞鸥 滚欺甫 牧飘费 且荐 乐档废 lpDip 俊 遏欧茄促.
	lpDib=(LPSTR)::GlobalLock(szDib);
	memcpy(lpDib,hDIB,bmpHeader.bfSize-sizeof(bmpHeader));
/*	 UINT len;
	 //捞固瘤 单捞鸥甫 佬绰促.
	if((len=_lread(bmpFile,(LPSTR)lpDib,bmpHeader.bfSize-sizeof(bmpHeader)))!=bmpHeader.bfSize-sizeof(bmpHeader))
	{
		::GlobalUnlock(szDib);
		::GlobalFree(szDib);
		szDib=NULL;
		lpDib=NULL;
		sprintf(m_strMessageTemp,"%s 拳老阑 佬阑荐 绝嚼聪促.",m_strFileName);
		return FALSE;
	}*/
    bmpInfoHeader = (LPBITMAPINFOHEADER)lpDib;
	bmcInfoHeader = (LPBITMAPCOREHEADER)lpDib;
	bmpInfo =(LPBITMAPINFO)lpDib;
	bmcInfo = (LPBITMAPCOREINFO)lpDib;
	bCreatePalette();
//	_lclose(bmpFile);
 return TRUE;
}
//迫饭飘甫 父电促.
BOOL CMyDib::bCreatePalette()
{
	//泅犁 荤侩窍绰 漠扼荐甫 罐绊
	m_nColorNums=bGetColorNums();
	if(m_nColorNums==0)
		return TRUE;

   //鞘饭飘 皋葛府甫 犬焊茄促澜
	szPal = ::GlobalAlloc(GHND, sizeof(LOGPALETTE)
									+ sizeof(PALETTEENTRY)
									* m_nColorNums);

	if (szPal == NULL)
	{
		sprintf(m_strMessageTemp,"%s palette 皋葛府啊 何练钦聪促.",m_strFileName);
		return FALSE;
	}
	//lpPal 遏欧窍绊
	lpPal = (LPLOGPALETTE) ::GlobalLock((HGLOBAL) szPal);

	lpPal->palVersion = PALVERSION;
	lpPal->palNumEntries =(WORD)m_nColorNums;
    //漠扼荐父怒 迫饭飘甫 漠饭飘 浚飘府俊 持绰促.
	for (int i = 0; i < (int)m_nColorNums; i++)
	{
		if (m_nDibStyle) //win3.0 捞惑滚傈老版快 促澜苞 鞍捞 窍绊
		{
			lpPal->palPalEntry[i].peRed = bmpInfo->bmiColors[i].rgbRed;
			lpPal->palPalEntry[i].peGreen =bmpInfo->bmiColors[i].rgbGreen;
			lpPal->palPalEntry[i].peBlue = bmpInfo->bmiColors[i].rgbBlue;
			lpPal->palPalEntry[i].peFlags = 0;
		}
		else //弊寇俊绰 促澜苞 鞍捞 茄促.
		{
			lpPal->palPalEntry[i].peRed = bmcInfo->bmciColors[i].rgbtRed;
			lpPal->palPalEntry[i].peGreen = bmcInfo->bmciColors[i].rgbtGreen;
			lpPal->palPalEntry[i].peBlue = bmcInfo->bmciColors[i].rgbtBlue;
			lpPal->palPalEntry[i].peFlags = 0;
		}
	}
//    CPalette 备炼眉俊 lpPal甫 傅农矫难辑 迫饭飘甫 父奠聪促.
	m_palDIB = new CPalette;
    m_palDIB->CreatePalette(lpPal);

	return TRUE;
}

//泅犁 厚飘甘狼 漠扼荐甫 茫绰促.
int CMyDib::bGetColorNums()
{

	//3.0 滚傈狼 厚飘甘捞搁
   	if (IS_WIN30_DIB(lpDib))
	{
		//m_nDibStyle  甫 3.0 厚飘甘 滚傈捞扼绊 汲沥
		m_nDibStyle=TRUE;
		m_nWidthX=bmpInfoHeader->biWidth;
		m_nWidthY=bmpInfoHeader->biHeight;
		DWORD dwClrUsed;
		//荤侩等 漠扼荐甫 罐酒辑 父距俊 弊巴捞 0捞 酒聪搁
		//弊巴捞 泅犁 厚飘甘捞 荤侩窍绰 漠扼荐 捞骨肺 汲沥
		dwClrUsed = bmpInfoHeader->biClrUsed;
		if (dwClrUsed != 0)
			return (int)dwClrUsed;
	}
	else
	{
		m_nDibStyle=FALSE;
		m_nWidthX=bmcInfoHeader->bcWidth;
		m_nWidthY=bmcInfoHeader->bcHeight;
	}

	WORD wBitCount;
	//厚飘 墨款飘甫 罐绰促.
	if (IS_WIN30_DIB(lpDib))
		wBitCount = bmpInfoHeader->biBitCount;
	else
		wBitCount = bmcInfoHeader->bcBitCount;

	switch (wBitCount)
	{
		case 1:
			return 2;

		case 4:
			return 16;

		case 8:
			return 256;

		default:
			return 0;
	}

}

LPSTR CMyDib::bFindDib()
{
	return (lpDib + *(LPDWORD)lpDib + bPaletteSize());
}
//迫贰飘 农扁甫 舅酒夯促.
WORD CMyDib::bPaletteSize()
{
	//3.0捞惑 滚傈 捞固瘤 捞搁
   if (m_nDibStyle)
	  return (WORD)(m_nColorNums * sizeof(RGBQUAD));
   else
	  return (WORD)(m_nColorNums * sizeof(RGBTRIPLE));
}
//扩档快俊 汲沥登绢乐绰 迫饭飘甫 荤侩茄促.
int CMyDib::SetSystemPalette(HDC hDC)
{
	
	if(m_nColorNums != 0) return FALSE;
	//泅犁 飘风漠扼葛靛捞搁 汲沥救窃
	if(!::GetDeviceCaps(hDC, RASTERCAPS) && RC_PALETTE) return FALSE;
	//泅犁 葛靛啊 割漠扼 葛靛捞哥 迫饭飘浚飘府啊 割俺牢瘤 犬牢
	int nSysColors = ::GetDeviceCaps(hDC, NUMCOLORS);
	int nPalEntries = ::GetDeviceCaps(hDC, SIZEPALETTE);

	if(nPalEntries ==0)
		return FALSE;
	
	
	int nEntries = (nPalEntries == 0) ? nSysColors : nPalEntries;

	LPLOGPALETTE pLogPal = (LPLOGPALETTE) new char[2 * sizeof(WORD) +
		nEntries * sizeof(PALETTEENTRY)];
	pLogPal->palVersion = 0x300;
	pLogPal->palNumEntries = nEntries;
	
	//矫胶袍 迫饭飘甫 掘绊
	::GetSystemPaletteEntries(hDC, 0, nEntries,
		(LPPALETTEENTRY) ((LPBYTE) pLogPal + 2 * sizeof(WORD)));
    HPALETTE m_hPalette;
	
	//矫胶袍 迫饭飘甫 汲沥茄促.
	m_hPalette = ::CreatePalette(pLogPal);
	SelectPalette(hDC, m_hPalette, TRUE);
	delete pLogPal;
	return TRUE;
}


void  CMyDib::PaintImage(int x, int y, HDC hDC)
{
	LPSTR    lpDIBBits;          
	BOOL     bSuccess=FALSE;     
	HPALETTE hPal=NULL;          
	HPALETTE hOldPal=NULL;       

	if (lpDib == NULL)
		return;
	//角龙 捞固瘤肺 盒府茄促.
	lpDIBBits = bFindDib();

	if (m_palDIB != NULL)
	{	
		hPal = (HPALETTE) m_palDIB->m_hObject;
		hOldPal = ::SelectPalette(hDC, hPal, TRUE);
	    RealizePalette(hDC);
	}
	else
	{
		if(SetSystemPalette(hDC))
		    RealizePalette(hDC);
	}

	int a=::SetStretchBltMode(hDC, COLORONCOLOR);

	int b=::SetDIBitsToDevice(hDC,                    // hDC
								   x,             // DestX
								   y,              // DestY
								   m_nWidthX,        // nDestWidth
								   m_nWidthY,       // nDestHeight
								   0,            // SrcX
								   0,   // SrcY
								   0,                          // nStartScan
								   (WORD)m_nWidthY,  // nNumScans
								   lpDIBBits,                  // lpBits
								   bmpInfo,     // lpBitsInfo
								   DIB_RGB_COLORS);            // wUsage


	if (hOldPal != NULL)
	{
		::SelectPalette(hDC, hOldPal, TRUE);
	}

}


void  CMyDib::PaintImage(int x, int y, int cx, int cy,HDC hDC )
{    
	LPSTR    lpDIBBits;          
	BOOL     bSuccess=FALSE;     
	HPALETTE hPal=NULL;          
	HPALETTE hOldPal=NULL;       

	if (lpDib == NULL)
		return;

	lpDIBBits = bFindDib();

	if (m_palDIB != NULL)
	{	
		hPal = (HPALETTE) m_palDIB->m_hObject;
		hOldPal = ::SelectPalette(hDC, hPal, TRUE);
	    RealizePalette(hDC);
	}
	else
	{
		if(SetSystemPalette(hDC))
		    RealizePalette(hDC);
	}


	int a=::SetStretchBltMode(hDC, COLORONCOLOR);

	int b=::StretchDIBits(hDC,                   // hDC
								   x,             // DestX
								   y,              // DestY
								   cx,        // nDestWidth
								   cy,       // nDestHeight
								   0,            // SrcX
								   0,   // SrcY
								   m_nWidthX,  
								   m_nWidthY,
								   lpDIBBits,                  // lpBits
								   bmpInfo,     // lpBitsInfo
								   DIB_RGB_COLORS,SRCCOPY);            // wUsage


	if (hOldPal != NULL)
	{
		::SelectPalette(hDC, hOldPal, TRUE);
	}

}
		
//捞固瘤甫 历厘茄促.
int CMyDib::SaveImage(LPSTR filename)
{

	if(filename!=NULL)
		lstrcpy((LPSTR)m_strFileName,(LPSTR)filename);
	int OffBits;
	HFILE bmpFile;
	OffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) +
			sizeof(RGBQUAD) * m_nColorNums;	
	bmpFile=_lcreat(m_strFileName,0);
	UINT len;
	len=_lwrite(bmpFile,(LPSTR)&bmpHeader,sizeof(BITMAPFILEHEADER));
	len=_lwrite(bmpFile,(LPSTR)lpDib,bmpHeader.bfSize-sizeof(bmpHeader));
	_lclose(bmpFile);
	return TRUE;
}








⌨️ 快捷键说明

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