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

摘要:
//创建调色板函数、R、G、B颜色组件,0-1之间的值为1FUNCTIONMaxGradientPalette(CONSTRedFactor、GreenFactor、BlueFactor:Single):hPalette;2VAR3i:整数;4逻辑调色板:TMaxLogPalette;5BEGIN6ASSERT(红色系数˂=1);//值必须为0

Delphi中使用调色板创建渐变色位图第1张Delphi中使用调色板创建渐变色位图第2张Delphi中使用调色板创建渐变色位图第3张

 //创建调色板函数,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 

免责声明:文章转载自《Delphi中使用调色板创建渐变色位图》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇zookeeper leader选举机制蓝牙DA14580开发:固件格式、二次引导和烧写下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

常用EXE文件反编译工具【转】

http://www.cnblogs.com/happyday56/p/3740108.html PE Explorer V1.99 R5 绿色汉化特别版_强大的可视化汉化集成工具 功能极为强大的可视化汉化集成工具,可直接浏览、修改软件资源,包括菜单、对话框、字符串表等; 另外,还具备有 W32DASM 软件的反编译能力和PEditor 软件的 PE 文件...

c#数字图像处理(一)Bitmap类、 Bitmapdata类和 Graphics类

Bitmap类、 Bitmapdata类和 Graphics类是C#图像处理中最重要的3个类,如果要用C#进行图像处理,就一定要掌握它们。 1.1 Bitmap类Bitmap对象封装了GDI+中的一个位图,此位图由图形图像及其属性的像素数据组成。 因此 Bitmap是用于处理由像素数据定义的图像的对象。 Bitmap类类的主要方法和属性如下: Get Pi...

位图

1.位图的介绍: 位图就是通过将数组下标与应用中的一些值关联,数组中该下标所指定的位置上的元素可以用来标识应用中值的情况(是否存在 or 数目 or 。。。)。 位图中的值可以是计数、标识(如图)。 2.位图的应用:       1.给40亿个不重复的unsigned int的整数,没有排过序,然后再给一个数,如果快速判断这个数是否在那40亿个数当中。...

C# 实现预览dwg文件完整源代码(无需autocad环境)

using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; using System.IO; namespace WindowsApplica...

详谈 oracle 索引 (笔记)

1、oracle索引空值问题   当在有空值得列上建立单列索引时,如果搜索条件为 is null 在解释计划中可以看到,对于此列oracle并没有使用索引查询;   但是当建立的是多列索引是,就会按照索引来进行查询。 2、B-树索引   示意图:    在B-树索引中,将会按照从上到下的顺序进行索引。如果列的选择度不低的话,索引扫描就会很慢。原因就在于要遍...

Windows API参考大全(转)

具体用法请参考msdn 1. API之网络函数 WNetAddConnection 创建同一个网络资源的永久性连接 WNetAddConnection2 创建同一个网络资源的连接 WNetAddConnection3 创建同一个网络资源的连接 WNetCancelConnection 结束一个网络连接 WNetCancelConnection2 结束一个...