如何获得RGB的各个颜色值

6 篇文章 0 订阅
1 篇文章 0 订阅
作者:唐宏冰
主页:http://jmtk.xiloo.com
作品:决战单词——让我们告别背单词的苦恼!
邮件:hb_t@sohu.com


一、在C或Pascal中的实现方法。
因为C语言和Pascal语言能支持计算机比较底层的操作,提供了位运算和指针,所以实现起来相当的容易和高效。
1、用位运算来实现。
我们只要通过位运算分别取出32位色彩值的第一字节、第二字节和第三字节即可。Red、Green和Blue所分别对应这三个字节。例如C语言中可以是这样的:

/*定义位运算所需的掩码*/
#define MASK_R 0xFF
#define MASK_G 0xFF00
#define MASK_B 0xFF0000
/*函数的第一个形参是32位长整型色彩值,其余的参数分别返回红、绿、蓝的色彩值。*/
void GetRGB(long int color,char *r,char *g,char *b)
{
*r=color & MASK_R; //取出第一字节给红色
*g=(color & MASK_G)>>8; //取出第二字节给绿色
*b=(color & MASK_B)>>16;//取出第三字节给蓝色

}

2、用指针运算来实现。使指针指向不同的内存空间来获得红绿蓝的色彩值。
void GetRGB(long int color,char *r,char *g,char *b)
{
long int *pcolor;
char * ptemp; //声明一个字符指针,只能指向一个字节。
pcolor=&color;
ptemp=(char *)pcolor; //临时指针指向长整型色彩值的第一位
*r=*ptemp; //第一位即为红色
*g=*(++ptemp); //指向第二个字节,得到绿色
*b=*(++ptemp); //指向第三个字节,得到蓝色
}
二、在Basic这类没有指针、位运算的语言中的实现。
由于Basic语言的先天不足,没有C语言和Pascal语言的指针和位运算,实现起来好像比较因难,最重要的是效率低下。例如,常常是这样:
'过程的第一个参数为颜色总量,其它三个参数返回红绿蓝的值。
Private Sub GetRGB(lColor As Long, bRed As Byte,bGreen As Byte, bBlue As Byte) 
    bRed = lColor Mod 256
    bBlue = lColor \ 65536
    bGreen = (lColor And 65535) \ 256
   
End Sub

那么,有没有效率高、好理解的方法呢?当然有!我们需要一个Windows API函数来帮忙,它的原形是:
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
该函数的作用是把一段内存中的数据拷贝到另一段内存中,Source表示源,Destination表示目标,Length表示拷贝的字节长度。我们由这个函数自然会想到,何不把一个32位色彩值拷贝到一个由4个Byte构成的结构中呢,那么这4个Byte的前3个变量就分别是Red、Green和Blue的值了。例如:
'首先定义一个由4个Byte变量构成的数据类型
Private Type Color32
    bRed As Byte
    bGreen As Byte
    bBlue As Byte
    bUnuse As Byte
End Type
Private Sub GetRGB(lColor As Long, bRed As Byte, bGreen As Byte, bBlue As Byte)
    Dim TempColor32 As Color32
    
    CopyMemory TempColor32, lColor, 4 '拷贝4个字节到结构中
    With TempColor32
        bRed = .bRed
        bGreen = .bGreen
        bBlue = .bBlue
    End With
        
End Sub
用这种方法来实现,相当的直观,更符合思维习惯,执行的速度也更快些,何乐而不为呢?其实这种方法给了我们一个很好的启示,凡是那些需要从某种类型的变量中取出一部分值的操作都可向这样实现了。
本文中的C程序段在TC3.0下通过,Basic程序段在VB6.0下通过。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以通过在调用 `create_polygon` 函数时传递 `fill` 参数来设置填充颜色,其中 `fill` 的可以是表示颜色的字符串,也可以是一个包含三个整数值的元组,分别表示 RGB 颜色空间中的红色、绿色和蓝色分量。 例如,以下代码将创建一个填充颜色为红色的多边形: ```python canvas.create_polygon(10, 10, 50, 10, 50, 50, fill="red") ``` 如果要使用 RGB 来设置填充颜色,可以使用以下代码: ```python canvas.create_polygon(10, 10, 50, 10, 50, 50, fill=(255, 0, 0)) ``` 这将创建一个填充颜色为红色的多边形,其中 `(255, 0, 0)` 表示红色的 RGB 。 ### 回答2: create_polygon函数是一种用于绘制多边形的Python函数,它可以根据提供的顶点坐标绘制多边形,并可以通过调整参数来修改多边形的外观。 要调整多边形的填充颜色,我们可以使用RGB表示颜色RGB代表红色(R)、绿色(G)和蓝色(B),每个颜色通道的取范围是0到255,表示不同强度的颜色。 我们可以通过在create_polygon函数中添加参数来指定填充颜色,该参数使用RGB表示。例如,要将填充颜色设为红色,可以使用(255, 0, 0)作为参数值。其中,255代表红色的最大强度,而0和0代表绿色和蓝色的最小强度。这样,我们就可以得到一个红色的填充多边形。 同样,我们可以通过修改RGB的组合来获得不同的填充颜色。例如,(0, 255, 0)将得到绿色填充,(0, 0, 255)将得到蓝色填充,而(255, 255, 255)将得到白色填充。 此外,我们还可以通过设置RGB中的来调整填充颜色的亮度和饱和度。增加红色分量的将产生更亮的颜色,而增加绿色和蓝色分量的将产生更饱和的颜色。 综上所述,我们可以使用RGB表示法来调整create_polygon函数中多边形的填充颜色。通过调整RGB的组合,我们可以获得不同强度、饱和度和颜色的填充效果。 ### 回答3: create_polygon是一个绘制多边形图形的函数,它可以让我们在画布上创建具有不同填充颜色的多边形。RGB是一种表示颜色的模型,它使用红、绿和蓝三个通道的数值来混合出各种颜色。 在使用create_polygon函数时,我们可以通过传递一个参数来指定填充颜色。这个参数使用RGB表示法,以三个整数(0-255范围)的形式表示红、绿和蓝的强度。例如,(255, 0, 0)代表纯红色,(0, 255, 0)代表纯绿色,而(0, 0, 255)代表纯蓝色。 如果我们想要创建一个填充颜色为红色的多边形,我们可以使用以下代码: create_polygon(50, 50, 100, 100, 150, 50, fill="rgb(255, 0, 0)") 这将在坐标点(50, 50),(100, 100)和(150, 50)之间创建一个三角形,并将其填充为红色。 类似地,如果我们想要创建一个填充颜色为绿色的多边形,我们可以使用以下代码: create_polygon(50, 50, 100, 100, 150, 50, fill="rgb(0, 255, 0)") 这将在同样的坐标点之间创建一个三角形,并将其填充为绿色。 同样地,我们可以使用不同的红、绿、蓝数值来创建其他颜色的填充。 总之,通过在create_polygon函数中使用fill参数,并结合RGB表示法来指定颜色的红、绿、蓝通道数值,我们可以调整多边形的填充颜色
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值