【发布时间】:2017-04-02 16:39:05
【问题描述】:
所以我不是编码专家:我只是对一些零碎的东西有一个模糊的了解。
我知道像素尺寸 X*Y 的图像存储在大小为 3*X*Y 的数组中,其中从给定 (x,y) 值中提取的每个向量对于 3 个 RGB 值具有 3 个元素。
我还知道,也可以将图像存储在 4*X*Y 数组中,其中每个拉出的向量现在有 4 个值,RGBA 与 A 为 Alpha,用于表示特定像素的不透明度。
现在我开始制作动画了,我想将黑色背景上的白云铅笔画导入 Flash。我希望绘图中较黑的部分更透明,而较亮的部分更不透明。我有以 .png 格式保存的图纸扫描件。
如果我知道如何在“数组级别”操作图像,我自己可以尝试一下,但我不知所措。
我需要一个程序,给定一个 .png 图像和一个参考 RGB 值 {abc},获取图像的 RGB 数组并将其转换为 RBGA 数组这样:
RGB 值 {p q r} 的像素
......变成......
一个像素的RGBA值{p q r 1-M[(|p-a|^2 + |q-b|^2 + |r-c|^2)^1/2]}。
其中 M 是使最大 alpha 值 = 1 的归一化因子。
即M = 1/[(255^2 + 255^2 + 255^2)^1/2]) = 0.0026411...
即替换像素的 alpha 值是像素颜色与可以输入的一些参考颜色之间的“距离”。
这需要将新的 RGBA 数组导出为 png 图像。
任何想法或任何动画师都知道这是否可以直接用 actionscript 完成?
示例:参考 = {250 251 245}
RGB 数组 =
|{250 251 245} {250 250 250}|
|{30 255 22} {234 250 0 }|
......变成......
RGBA 数组 =
|{250 251 245 1} {250 251 245 0.987}|
|{30 255 22 0.173} {234 250 0 0.352}|
【问题讨论】:
-
您似乎掌握了所涉及的数学知识,有什么问题吗?这不是代码编写服务。
-
不,我不知道,只是我不知道如何实际实现它。我只在 Matlab 中完成了编码的基础知识,所以我完全不知所措。
-
听上去很有趣……来点样张图片怎么样?
标签: arrays image image-processing colors