关闭

关于TasphyrePalette的基础使用

标签: class
782人阅读 评论(0) 收藏 举报
分类:
学 delphiX ,但不知

DXDraw.ColorTable := ImageList.Items.ColorTable;
  DXDraw.DefColorTable := ImageList.Items.ColorTable;
  DXDraw.UpdatePalette;

这几句是什么意思

http://www.huosoft.com/bbs/ShowPost.asp?ThreadID=134 找到了介绍的文章

关于TasphyrePalette的基础使用

关于TasphyrePalette的基础使用
//本文意在描述TasphyrePalette的基本使用方面的知识,文中内容针对入门级用户了解TasphyrePalette而书写的。

Palette是什么?Pallette是调色板的意思。
我们首先要开始一个简单的关于调色版使用的例子,让你简单的知道调色板该如何使用。
首先我们在单元的Type里定义一个Palette,看起来象下面的一样。Palette可以是你随便起的。
Palette: TAsphyrePalette;
这样我们就得到了一个Palette,但是我们现在还不能使用。我们还需要像下面这样:
Palette:= TAsphyrePalette.Create();
这样我们才算真真正正的得了一个Palette(调色板),现在这个调色板是空的或者说是一个我们新买到的调色板,我们需要给这个新调色板里添加基础颜色。看起来像下面的步骤。
Palette.Add($FFFF0000, 0.0);
Palette.Add($FFFFFF00, 1.0);
Palette的add是添加的意思。在Palette里面我们添加了两种颜色。$FFFF0000是红色,$FFFFFF00是黄色。也许你到现在还不明白,我们做这些的意义。不过不要紧,请跟着我往下看,秘密就在最后面的一个参数上,现在我们不要去理会它。
我们下一步要做的是,即然我们把颜色加到调色板里,那么我们怎么样来使用调色板里的颜色。
我们注意看下面的部分:
palette.Color[0.0] // 1
palette.Color[1.0]  // 2
这是我们通过Palette来获得颜色的方法。通过1,我们可以得到红色。通过2我们可以获得黄色。也许你现在会问,即然这样,我们直接使用颜色代码$FFFF0000或$FFFFFF00不就可以了么?干嘛,还要用使palette呢?
现在我们来思考一个问题,如果我们需要一个黄色和红色中间的颜色。我们该怎么做?
palette.Color[0.5]
注意上面这句后面的参数。他是0.0和1.0之间的中间值。也许你可能已经想到,没错,我们通过中间值,就能得到红色和黄色中间的颜色。
Palette.Add($FFFF0000, 0.0);
Palette.Add($FFFFFF00, 1.0);
上面这两句是我们曾经为调色板添加的颜色,那么后面的参数,0.0 和 1.0,你已经可以明白是做什么用的,不需要我再细细的说明。
那么在正常使用的时候呢!是下面这个样子。
Sender.Canvas.LineEx(10, 200,100, 220,palette.Color[0.5])
上面是一个画线的语句,里面的数值分别是x1,y1,x2,y2,这是画一条线用的两点坐标,如果你不懂的话建议你回头去看看初中数学书,那里会给你提供你关于坐标的知识帮助。最后的palette.Color[0.5]就是这条线的颜色color,中间值0.5,跟据我们前面设计的palette,这条线的颜色是红色和黄色中间的颜色。
最后,准备简单的分析一下palette.
Palette的根是TasphyrePalette类,我们重点就要看看TasphyrePalette.有兴趣的入门者跟我往下看:
TAsphyrePalette = class
 private
  Data : array of TAsphyreColorNode;
这是TasphyrePalette类最头上的两句,我们不用看得那么深,初学者看得太深,最大的坏处就是会让自己会头痛,就像我现在这样。
TasphyrePalette的核心就是数组化的TasphyreColorNode,我们现在看到重点了。
我们现在需要集中精力来看TasphyreColorNode是个什么东西,他怎么就能把颜色记住。
TAsphyreColorNode = record
  Color   : TTrueColor;
  NodeType: TNodeType;
  Theta   : Real;
上面的四行,就是Tasphyre的核心了,你可能会感叹,就这么简单啊!没算一直就这么简单,是你把它想的太难了。
好了,我们来简单理解一下TasphyreColorNode
Color   : TtrueColor 就是我们Palette.Add($FFFF0000, 0.0);句子存放颜色的地方。
Theta   : Real;  就是存放0.0 和 0.1的地方。
你可能会大叫那NodeType是什么啊!我们至始到终也没设置它。看看下面这句ADD。
Result:= Add(Diffuse, ntPlain, Theta);
发现没有,NodeType已经被黓认为ntPlain了。为什么?因为需要你自己去发现,不要总等别人喂你,不能光让我一个人头痛啊,你说是不是。
这里我们还有一个东西,是需要必须了解的。就是TtrueColor是个什么玩意!
来跟我看看,简单到你可能会吃惊。
TTrueColor = record
  r, g, b, a: Single;
R,G,B,A,分别带表红色,绿色,蓝色,对就是三原色。最后一个A是用来记录alpha值的。什么是alpha呢!让我想想,还是你自己去查资料吧!光alpha详细的来讲,都够写一本书的了。呵呵!

可参照http://www.huosoft.com/bbs/ShowPost.asp?ThreadID=135例子来阅读本文。

 

 
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:248218次
    • 积分:3770
    • 等级:
    • 排名:第8498名
    • 原创:109篇
    • 转载:70篇
    • 译文:0篇
    • 评论:18条
    最新评论
    链接
    上位机