正在加载图片...
文件中读取调色板的RGB值,填写到每一项中;④产生逻辑调色板 (2)产生位图 BITMAP)句柄,该项工作由函数 CreateDIBitmap来完成。 hBitmap=CreateDIBitmap(hDc, (LPBITMAPINFOHEADER)Iplmg Data, CBM INIT (LPSTR)Iplmg Data+sizeof(BI TMAPINFOHEADER)+Num Colors*sizeof( RGBQUAD) ( LPBITMAPINFO)Iplmg Data, DIB RGB COLORS); CreateD Bitmap的作用是产生一个和 Windows设备无关的位图。该函数的第一项参数为设 备上下文句柄。如果位图用到了调色板,要在调用 CreateDIBitmap之前将逻辑调色板选入 该设备上下文中,产生 hBitmap后,再把原调色板选入该设备上下文中,并释放该上下文; 第二项为指向 BITMAPINFOHEADER的指针:第三项就用常量 CBM INI,不用考虑;第四 项为指向调色板的指针;第五项为指向 BITMAPINFO(包括 BITMAPINFOHEADER调色板, 及实际的图象数据)的指针;第六项就用常量DⅠ B RGB COLORS,不用考虑。 上面提到了设备上下文,相信编过 Windows程序的读者对它并不陌生,这里再简单介绍 下。 Windows操作系统统一管理着诸如显示,打印等操作,将它们看作是一个个的设备, 每一个设备都有一个复杂的数据结构来维护。所谓设备上下文就是指这个数据结构。然而, 我们不能直接和这些设备上下文打交道,只能通过引用标识它的句柄(实际上是一个整数) 让 Windows去做相应的处理。 产生的逻辑调色板句柄 pAlette和位图句柄 hBitmap要在处理 WM PAINT消息时使用,这 样才能在屏幕上显示出来,处理过程如下面的程序。 hDC. hMemDC PAINTSTRUCT case WM PAINt hDC= Begin Paint(hwnd,&ps),∥获得屏幕设备上下文 f( hBitmap)/ hBitmap一开始是NUL,当不为NULL时表示有图 hMemDC= Create CompatibleDC(hDC;∥建立一个内存设备上下文 if( pAlette∥有调色板 ∥将调色板选入屏幕设备上下文 SelectPalette(hDC, hPalette, FALSE) ∥将调色板选入内存设备上下文 SelectPalette(hMemDC, hpalette, FALSE); RealizePalette(hDC) ∥将位图选入内存设备上下文 Selectobject(hMemDC, hBitmap)文 件 中 读 取 调 色 板 的 RGB 值 , 填 写 到 每 一 项 中 ; ④ 产 生 逻 辑 调 色 板 : hPalette=CreatePalette(pPal)。 (2) 产生位图(BITMAP)句柄,该项工作由函数 CreateDIBitmap 来完成。 hBitmap=CreateDIBitmap(hDc,(LPBITMAPINFOHEADER)lpImgData, (LONG)CBM_INIT, (LPSTR)lpImgData+sizeof(BITMAPINFOHEADER)+NumColors*sizeof(RGBQUAD), (LPBITMAPINFO)lpImgData, DIB_RGB_COLORS); CreateDIBitmap 的作用是产生一个和 Windows 设备无关的位图。该函数的第一项参数为设 备上下文句柄。如果位图用到了调色板,要在调用 CreateDIBitmap 之前将逻辑调色板选入 该设备上下文中,产生 hBitmap 后,再把原调色板选入该设备上下文中,并释放该上下文; 第二项为指向 BITMAPINFOHEADER 的指针;第三项就用常量 CBM_INI,不用考虑;第四 项为指向调色板的指针;第五项为指向 BITMAPINFO(包括 BITMAPINFOHEADER,调色板, 及实际的图象数据)的指针;第六项就用常量 DIB_RGB_COLORS,不用考虑。 上面提到了设备上下文,相信编过 Windows 程序的读者对它并不陌生,这里再简单介绍一 下。Windows 操作系统统一管理着诸如显示,打印等操作,将它们看作是一个个的设备, 每一个设备都有一个复杂的数据结构来维护。所谓设备上下文就是指这个数据结构。然而, 我们不能直接和这些设备上下文打交道,只能通过引用标识它的句柄(实际上是一个整数), 让 Windows 去做相应的处理。 产生的逻辑调色板句柄 hPalette 和位图句柄 hBitmap 要在处理 WM_PAINT 消息时使用,这 样才能在屏幕上显示出来,处理过程如下面的程序。 Static HDC hDC,hMemDC; PAINTSTRUCT ps; case WM_PAINT: { hDC = BeginPaint(hwnd, &ps); //获得屏幕设备上下文 if (hBitmap) //hBitmap 一开始是 NULL,当不为 NULL 时表示有图 { hMemDC = CreateCompatibleDC(hDC); //建立一个内存设备上下文 if (hPalette) //有调色板 { //将调色板选入屏幕设备上下文 SelectPalette (hDC, hPalette, FALSE); //将调色板选入内存设备上下文 SelectPalette (hMemDC, hpalette, FALSE); RealizePalette (hDC); } //将位图选入内存设备上下文 SelectObject(hMemDC, hBitmap);
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有