zoukankan      html  css  js  c++  java
  • 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 
  • 相关阅读:
    Mysql 主备原理
    Mysql-innodb日志写入时机
    Innodb 架构
    Reactor/Proactor
    select,poll,epoll,IO多路复用进化史
    从硬件+操作系统的角度解释为什么操作系统的IO单位是磁盘块
    Dubbo 核心功能在业务架构中的体现
    Mysql-Innodb 锁总结
    第一阶段冲刺三
    第一阶段冲刺二
  • 原文地址:https://www.cnblogs.com/sun_catboy/p/1304951.html
Copyright © 2011-2022 走看看