精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● Delphi>>图形界面和窗体>>图形图象>>在delphi中如何处理调色板?

主题:在delphi中如何处理调色板?
发信人: wusi()
整理人: windfire(2000-12-05 18:36:43), 站内信件
【 在 robin007 (知更鸟) 的大作中提到: 】
void RefreshPalette(Graphics::TBitmap *d,Graphics::TBitmap *s,TColor *
RGBColor,unsigned int TotalColors)
{
  int  W,H;
  Byte *sour,*dest;
  LOGPALETTE *lp;
  HGLOBAL hpal=GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT,sizeof(LOGPAL
ETTE)+TotalColors*sizeof(PALETTEENTRY));
  lp=(LOGPALETTE *)GlobalLock(hpal);
  lp->palVersion=0x300;
  lp->palNumEntries=(Word)TotalColors;

   for(unsigned int i=0;i<TotalColors;i++) {
lp->palPalEntry[i].peFlags=NULL;
    lp->palPalEntry[i].peRed=  GetRValue(RGBColor[i]);
    lp->palPalEntry[i].peGreen=GetGValue(RGBColor[i]);
    lp->palPalEntry[i].peBlue= GetBValue(RGBColor[i]);
   }


  d->ReleasePalette(); // release the previous palette
  d->Palette=CreatePalette(lp);
  GlobalUnlock(hpal);
  GlobalFree(hpal);
  if(TotalColors==256) {
    W=s->Width;
    H=s->Height;
  }
  else {
    W=(s->Width+1)/2;
    H=s->Height;
  }
  for (int y = 0; y < H; y++)
{
dest =(Byte *) d->ScanLine[y];
     sour =(Byte *) s->ScanLine[y];
     for (int x = 0; x <W; x++)
dest[x] = sour[x];
}

}





--
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.38.198.85]

[关闭][返回]