正在加载图片...
pPal->palPalEntryli] peBlue=lpRGB->rgbBlue pPal->palPalEntryli]. peFlagS-=(BYTE)O IpRGB++;∥指针移到下一项 ∥产生逻辑调色板, pAlette是一个全局变量 hPalette=CreatePalette(pPal ∥释放局部内存 LocalUnlock(hPal) Local Free(hPal) ∥获得设备上下文句柄 hDc=GetDC(hWnd) f(pAlette)∥如果刚才产生了逻辑调色板 ∥将新的逻辑调色板选入DC,将旧的逻辑调色板句柄保存在/ hPrey Palette hPrevPalette=SelectPalette(hDc, hPalette, FALSE) RealizePalette(hDc ∥产生位图句柄 hBitmap=CreateDI Bitmap(hDc, (LPBITMAPINFOHEADER)Iplmg Data (LONG)CBM INIT. (LPSTR)Iplmg Data+sizeof( BITMAPINFOHEADER)+ Num Colors *sizeof(RGBQUAD), ( LPBITMAPINFO)Iplmg Data, DIB RGB COLORS) ∥将原来的调色板(如果有的话)选入设备上下文句柄 if(pAlette&& hPrevPalette) SelectPalette(hDc, hPrev Palette, FALSE) RealizePalette(hDc) ReleaseD(hWnd,hDe),∥释放设备上下文 GlobalUnlock( hIng Data);∥解锁内存区 return TRUE;∥成功返回 对上面的程序要说明两点 (1)对于需要调色板的图,要想正确地显示,必须根据bmp文件,产生逻辑调色板。产生 的方法是:①为逻辑调色板指针分配内存,大小为逻辑调色板结构( LOGPALETTE)长度加 Num Colors个 PALETTENTRY大小(调色板的每一项都是一个 PALETTEENTRY结构):② 填写逻辑调色板结构的头pal-> palNumEntries= Num Colors,pPal-> advErsion=0x300;③从pPal->palPalEntry[i].peBlue=lpRGB->rgbBlue; pPal->palPalEntry[i].peFlags=(BYTE)0; lpRGB++; //指针移到下一项 } //产生逻辑调色板,hPalette 是一个全局变量 hPalette=CreatePalette(pPal); //释放局部内存 LocalUnlock(hPal); LocalFree(hPal); } //获得设备上下文句柄 hDc=GetDC(hWnd); if(hPalette) //如果刚才产生了逻辑调色板 { //将新的逻辑调色板选入 DC,将旧的逻辑调色板句柄保存在//hPrevPalette hPrevPalette=SelectPalette(hDc,hPalette,FALSE); RealizePalette(hDc); } //产生位图句柄 hBitmap=CreateDIBitmap(hDc,(LPBITMAPINFOHEADER)lpImgData, (LONG)CBM_INIT, (LPSTR)lpImgData+sizeof(BITMAPINFOHEADER)+NumColors*sizeof(RGBQUAD), (LPBITMAPINFO)lpImgData, DIB_RGB_COLORS); //将原来的调色板(如果有的话)选入设备上下文句柄 if(hPalette && hPrevPalette) { SelectPalette(hDc,hPrevPalette,FALSE); RealizePalette(hDc); } ReleaseDC(hWnd,hDc); //释放设备上下文 GlobalUnlock(hImgData); //解锁内存区 return TRUE; //成功返回 } 对上面的程序要说明两点: (1) 对于需要调色板的图,要想正确地显示,必须根据 bmp 文件,产生逻辑调色板。产生 的方法是:①为逻辑调色板指针分配内存,大小为逻辑调色板结构(LOGPALETTE)长度加 NumColors 个 PALETTENTRY 大小(调色板的每一项都是一个 PALETTEENTRY 结构);② 填写逻辑调色板结构的头 pPal->palNumEntries = NumColors; pPal->palVersion = 0x300;③从
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有