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

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. }   

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值