创建调色板、计算颜色表长度

Code:
  1. Code:   
  2. // 创建逻辑调色板       
  3. void MakePalette(int nColorTableLength, LPRGBQUAD lpColorTable, HPALETTE hPalette)       
  4. {       
  5.     // 如果是真彩色就不用创建       
  6.     if (nColorTableLength == 0)       
  7.         return;       
  8.       
  9.     // 删除旧的逻辑调色板       
  10.     if (hPalette != NULL)       
  11.         DeleteObject(hPalette);       
  12.     //        
  13.     LPLOGPALETTE pLogPal = (LPLOGPALETTE) new char[2*sizeof(WORD)+       
  14.         nColorTableLength*sizeof(PALETTEENTRY)];       
  15.       
  16.       
  17.     pLogPal->palVersion = 0x300;       
  18.     pLogPal->palNumEntries = nColorTableLength;       
  19.     LPRGBQUAD lpDibQuad = (LPRGBQUAD)lpColorTable;       
  20.     for (int i = 0; i<nColorTableLength; i++)       
  21.     {       
  22.         pLogPal->palPalEntry[i].peRed = lpDibQuad->rgbRed;       
  23.         pLogPal->palPalEntry[i].peGreen = lpDibQuad->rgbGreen;       
  24.         pLogPal->palPalEntry[i].peBlue = lpDibQuad->rgbBlue;       
  25.         pLogPal->palPalEntry[i].peFlags = 0;       
  26.         lpDibQuad++;       
  27.     }       
  28.            
  29.     // 创建逻辑调色板       
  30.     hPalette = CreatePalette(pLogPal);       
  31.     delete pLogPal;       
  32. }      
  33.   
  34. // 计算颜色表长度   
  35. int ComputeColorTableLength(int nBCount)   
  36. {   
  37.  printf("/nbit:%d/n", nBCount);   
  38.  int nColorLength;   
  39.  switch(nBCount)   
  40.  {   
  41.  case 1:   
  42.   nColorLength = 2;   
  43.   break;   
  44.     
  45.  case 4:   
  46.   nColorLength = 16;   
  47.   break;   
  48.  case 8:   
  49.   nColorLength = 256;   
  50.   break;   
  51.  case 16:   
  52.  case 24:   
  53.  case 32:   
  54.   nColorLength = 0;   
  55.   break;   
  56.  default:   
  57.  assert(FALSE);//断言它的条件返回错误,则终止程序执行   
  58.  }   
  59.  assert((nColorLength>=0) && (nColorLength <=256));   
  60.  return nColorLength;   
  61. }   

 

你可能感兴趣的:(创建调色板、计算颜色表长度)