MFC BMP 리소스 파일 로드
3531 단어 mfcBMP 비트맵 로드BMP 리소스 로드
// nID ID。
void CMyBitmap::LoadBitmapEx(UINT nID, BOOL bTransparent )
{
// can only load once
ASSERT(!m_pPalette);
CDC dcScreen;
dcScreen.Attach(::GetDC(NULL));
// find and lock bitmap resource
HRSRC hRsrc = FindResource(AfxGetResourceHandle(),MAKEINTRESOURCE(nID),RT_BITMAP);
HGLOBAL hglb = LoadResource(AfxGetResourceHandle(), hRsrc);
LPBITMAPINFOHEADER lpBitmap = (LPBITMAPINFOHEADER)LockResource(hglb);
// get pointers into bitmap structures (header, color table and picture bits)
LPBITMAPINFO pBitmapInfo = (LPBITMAPINFO)lpBitmap;
LPBITMAPINFOHEADER pBitmapInfoHeader = (LPBITMAPINFOHEADER)lpBitmap;
// if the picture data uses more then 8 bits per pixel, there's
// no color table to turn into a palette
int nNumberOfColors=0;
if (lpBitmap->biClrUsed)
nNumberOfColors = lpBitmap->biClrUsed;
else if (pBitmapInfoHeader->biBitCount <= 8)
nNumberOfColors = (1<<pBitmapInfoHeader->biBitCount);
LPBYTE pBitmapPictureData = (LPBYTE)lpBitmap+lpBitmap->biSize+
(nNumberOfColors*sizeof(RGBQUAD));
// get width and height
m_Width = lpBitmap->biWidth;
m_Height = lpBitmap->biHeight;
// create a logical palette from the color table in this bitmap
if (nNumberOfColors)
{
LOGPALETTE *pLogPal = (LOGPALETTE *)new BYTE[
sizeof(LOGPALETTE) + (nNumberOfColors * sizeof(PALETTEENTRY))];
pLogPal->palVersion = 0x300;
pLogPal->palNumEntries = nNumberOfColors;
for (int i = 0; i < nNumberOfColors; i++)
{
// if flag set, replace grey color with window's background color
if (bTransparent &&
pBitmapInfo->bmiColors[i].rgbRed==192 &&
pBitmapInfo->bmiColors[i].rgbGreen==192 &&
pBitmapInfo->bmiColors[i].rgbBlue==192)
{
pBitmapInfo->bmiColors[i].rgbRed= GetRValue(::GetSysColor(COLOR_BTNFACE));
pBitmapInfo->bmiColors[i].rgbGreen=GetGValue(::GetSysColor(COLOR_BTNFACE));
pBitmapInfo->bmiColors[i].rgbBlue= GetBValue(::GetSysColor(COLOR_BTNFACE));
}
pLogPal->palPalEntry[i].peRed = pBitmapInfo->bmiColors[i].rgbRed;
pLogPal->palPalEntry[i].peGreen = pBitmapInfo->bmiColors[i].rgbGreen;
pLogPal->palPalEntry[i].peBlue = pBitmapInfo->bmiColors[i].rgbBlue;
pLogPal->palPalEntry[i].peFlags = 0;
}
m_pPalette=new CPalette;
m_pPalette->CreatePalette(pLogPal);
delete []pLogPal;
dcScreen.SelectPalette(m_pPalette,TRUE);
dcScreen.RealizePalette();
}
// create device dependant bitmap
HBITMAP bitmap = ::CreateDIBitmap(dcScreen.m_hDC, pBitmapInfoHeader, CBM_INIT, pBitmapPictureData,
pBitmapInfo, DIB_RGB_COLORS);
// attach this new bitmap object to our CBitmap class
Attach(bitmap);
// release dc
::ReleaseDC(NULL, dcScreen.Detach());
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[프로세스 간 통신] 오일 탱크를 이용하여 프로세스 간의 통신을 실현하다2: 연결이 없는 신뢰할 수 없는 데이터 전송 4: 오일 탱크의 서버 프로세스 읽기, 클라이언트 프로세스 쓰기 "데이터 수신", IDM_MAILSLOT_RECE,view에서 메뉴에 명령 응답 추가 2: 응답 함수에서...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.