我正在做一些关于图像处理应用程序的工作(为了好玩),我正在努力完全理解ColorMatrix转换的工作原理.我得到线性/仿射变换的基础知识,并且可以通过在线复制示例得到很好的结果,但我想完全理解为什么有些东西可以工作而不仅仅是满足它的工作原理.
例如,对图像进行简单转换以产生其负值(每种颜色转换为其各自的互补)使用以下矩阵:
[-1, 0, 0, 0, 0]
[0, -1, 0, 0, 0]
[0, 0, -1, 0, 0]
[0, 0, 0, 1, 0]
[1, 1, 1, 0, 1]
Run Code Online (Sandbox Code Playgroud)
我知道-1是180度的余弦,这是将一种颜色"翻转"到它的互补所需的旋转,但我不明白的是颜色向量如何与上述矩阵相乘并产生正确的互补向量.
例如,如果像素的颜色矢量为[247,255,0,255,1](使用RGBAW空间),则对上述矩阵进行乘法会产生[-247,-255,0,255,1] ,但这是不正确的,因为上面的实际互补色是[8,0,255,255,1].
我缺少的东西在这里很明显,很高兴承认,我不能完全知道我在做什么:)是颜色载体转化一些其他的坐标系来表示?(例如不是0-255)
如果有人能帮助提供我理解的"缺失环节",我会非常感激.
编辑
我刚刚发现以下矩阵也起作用,实际上是直观的(它产生了正确的向量).
-1 0 0 0 0
0 -1 0 0 0
0 0 -1 0 0
1 1 1 1 0
0 0 0 0 1
Run Code Online (Sandbox Code Playgroud)
所以我的新问题是:为什么这两个矩阵都有效?后者为我提供了更令人满意的解决方案,因为我可以从代数的角度理解它的工作原理.四行是否用于缩放?如果是这样,为什么缩放增加255?它从哪里获得价值?
对不起,如果这些是非常愚蠢的问题,我正试图让这个问题失败.
我有一个控制台应用程序,它启动 RabbitMQ 服务器(作为使用rabbitmq-server.bat 文件的应用程序),然后尝试在其顶部创建一个队列并开始侦听消息。代理启动正常,但是一旦我尝试声明队列,我就会收到一个异常,指出队列名称不存在。我对此有点困惑,因为我正在尝试创建队列,并且不知道为什么它要寻找具有该名称的现有队列。
这是我用来运行服务器的代码:
var model = QueueModelFactory.CreateModel();
model.ExchangeDeclare(exchangeName, ExchangeType.Fanout, true);
model.QueueDeclare(QueueName, false, false, false, null);
model.QueueBind(QueueName, exchangeName, "");
var subscription = new Subscription(model, QueueName, false);
while (true)
{
var args = subscription.Next();
ProcessQueueItem(args.Body);
subscription.Ack(args);
}
Run Code Online (Sandbox Code Playgroud)
异常发生在调用 QueueDeclare 的行上。我得到的确切异常是:
“AMQP 操作被中断:AMQP 关闭原因,由 Peer 发起,代码 = 404,text =“NOT_FOUND - vhost '/' 中没有队列 'FavorCompletions'”,classId=50,methodId=10,cause=”。
我曾一度让这个工作正常,然后重构了一些代码却让它崩溃了。我不知道我做错了什么,因为所有示例应用程序似乎都做了完全相同的事情。
任何帮助,将不胜感激。