首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将RGB值转换为ColorMatrix

将RGB值转换为ColorMatrix
EN

Stack Overflow用户
提问于 2018-05-28 08:42:54
回答 1查看 2.2K关注 0票数 0

我想给一张黑白图像上色。

为此,我使用ColorMatrix。例如,当我想要将图像着色为红色时,我使用以下ColorMatrix:

代码语言:javascript
复制
1,0,0,0,0,
0,1,0,0,0,
0,0,1,0,0,
0,0,0,1,0,
1,0,0,0,0,

现在我想从颜色表中选择一种颜色,例如从这样的颜色表中选择颜色:

我的计划是使用GetPixel检索光标下的颜色,并将此RGB值转换为ColorMatrix。

当我使用GetPixel而不是红色时,我会得到

代码语言:javascript
复制
R: 255
G: 0
B: 0

如何将RED值255转换为ColorMatrix值?应该是1.0。如果Red值为127,则该值将为0.5

我是否应该简单地使用“三的规则”来确定1.0的值,或者应该如何处理?

EN

回答 1

Stack Overflow用户

发布于 2018-05-28 09:57:30

首先,我认为您应该阅读ColorMatrix类,也许还应该更新您对矩阵的理解(尽管ColorMatrix文档为您提供了足够的信息,您不需要理解矩阵数学)。

让我们看看你的矩阵:

代码语言:javascript
复制
1,0,0,0,0
0,1,0,0,0
0,0,1,0,0
0,0,0,1,0
1,0,0,0,0

该矩阵将按1缩放红色、绿色、蓝色和alpha分量,然后将红色分量加1,绿色、蓝色和alpha分量加0。

我不认为这真的是你想要的。为了给图像上色,我认为最好是将图像的RGB值相乘,而不是相加。否则,如果你有一个带有白色像素的黑白图像(即RGB 1,1,1),那么当你尝试给它上色时,它将保持白色,而它实际上应该呈现你应用的颜色。

让我们来看一下矩阵,看看它是如何影响像素颜色的:

代码语言:javascript
复制
Sr,  0,  0,  0, 0
 0, Sg,  0,  0, 0
 0,  0, Sb,  0, 0
 0,  0,  0, Sa, 0
Tr, Tg, Tb, Ta, 1

S代表"scale“,T代表translate。红色分量将与Sr相乘,然后将Tr相加;绿色分量将与Sg相乘,然后将Tg相加;蓝色分量将与Sb相乘,然后将Tb相加;alpha分量将与Sa相乘,然后将Ta相加。

因此,要构造一个矩阵来为您的图像着色,您可以这样做:

代码语言:javascript
复制
Color colour = colourDialog.Color; // Or wherever you get your Color instance from
float[][] colourMatrixElements =
{
    new float[] { colour.R / 255.0f, 0, 0, 0, 0 },
    new float[] { 0, colour.G / 255.0f, 0, 0, 0 },
    new float[] { 0, 0, colour.B / 255.0f, 0, 0 },
    new float[] { 0, 0, 0, 1, 0 },
    new float[] { 0, 0, 0, 0, 1 }
};
var colourMatrix = new ColorMatrix(colorMatrixElements);

现在,您可以使用ColorMatrix为您的图像着色。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50557802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档