Delphi中使用调色板创建渐变色位图

 //创建调色板函数,R,G,B颜色分量,0-1之间取值

 

 1  FUNCTION MaxGradientPalette(CONST RedFactor, GreenFactor, BlueFactor:  Single):  hPalette;
 2    VAR
 3      i             :  INTEGER;
 4      LogicalPalette:  TMaxLogPalette;
 5  BEGIN
 6      ASSERT (RedFactor    <=   1 );    //  values must be  0   to   1
 7      ASSERT (GreenFactor  <=   1 );
 8      ASSERT (BlueFactor   <=   1 );
 9 
10      LogicalPalette.palVersion    : =  PaletteVersion;
11      LogicalPalette.palNumEntries : =   256 ;
12      FOR i : =   0  TO  255  DO
13      BEGIN
14        LogicalPalette.palPalEntry[i].peRed   : =  Round(i  *  RedFactor);
15        LogicalPalette.palPalEntry[i].peGreen : =  Round(i  *  GreenFactor);
16        LogicalPalette.palPalEntry[i].peBlue  : =  Round(i  *  BlueFactor);
17        LogicalPalette.palPalEntry[i].peFlags : =  PC_RESERVED;
18      END;
19      RESULT : =  CreatePalette(pLogPalette(@LogicalPalette)^);
20  END;
21 

 创建使用调色板的位图

 1  procedure   GradientBitmap( var  ShowBitMap:TBitmap;CONST RedFactor, GreenFactor, BlueFactor:  Single);
 2    CONST
 3      BitmapSize  =   256 ;
 4    VAR
 5      i     :  INTEGER;
 6      index :  INTEGER;
 7      j     :  INTEGER;
 8      Row   :  pByteArray;
 9  begin
10       ShowBitMap.PixelFormat : =  pf8bit;
11       ShowBitMap.Height : =  BitmapSize;
12       ShowBitMap.Width  : =  BitmapSize;
13       //   1 .  Create palette first.
14       ShowBitMap.Palette: =  MaxGradientPalette(RedFactor, GreenFactor, BlueFactor);
15 
16       //    2 . Assign Scanline value;
17      FOR  j : =   0  TO BitmapSize - 1  DO
18      BEGIN
19        Row : =   ShowBitMap.Scanline[j];
20        FOR i : =   0  TO BitmapSize - 1  DO
21        BEGIN
22          index : =  (i + j) DIV  2 ;
23          Row[i] : =   index;
24        END
25      END;
26  end ;
27 

 使用调色板位图,显示在Picture上面

 

 1  procedure  TFormPf8bit.Button4Click(Sender: TObject);
 2  var
 3    bitmap1:TBitmap;
 4  begin
 5    bitmap1: = TBitmap.Create;
 6    GradientBitmap( bitmap1, 0.5 , 0.2 , 1.0 );
 7    ImageShow.Picture.Graphic: = bitmap1;
 8    bitmap1.Free;
 9  end ;
10 

 

转载于:https://www.cnblogs.com/sun_catboy/archive/2008/10/06/1304951.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值