对于一个业余爱好项目,我将构建一个程序,当给定图像位图时,将创建一个十字绣图案作为PDF.我将在Mac上使用Cocoa/Objective C.
源位图通常是24bpp图像,但是在数百万种可用颜色中,只有少数存在作为十字绣线程.线程有各种类型.DMC是最广泛使用的,几乎整个范围都可以从各种网站获得RGB值.例如,这是一个.
DMC# Name R G B ----- ------------------ --- --- --- blanc White 255 255 255 208 Lavender - vy dk 148 91 128 209 Lavender - dk 206 148 186 210 Lavender - md 236 207 225 211 Lavender - lt 243 218 228 ...etc...
正如我所看到的,我的第一个问题是从RGB的起点开始,从图像中的像素中选择DMC集中可用的最近颜色.在数学上找到最接近的DMC颜色的最佳方法是什么,并确保它也适合作为颜色?
虽然我将使用Cocoa,但您可以在发布的任何代码中使用伪代码(甚至是Java!).
使用LAB颜色空间并找到最近的欧氏距离的颜色.在RGB颜色空间中执行此操作将产生反直觉的结果.(或使用HSL颜色空间.)
因此,只需遍历每个像素,找到所选颜色空间内距离最近的颜色.注意,对于某些颜色空间(例如那些采用色调的颜色空间),必须循环计算距离.
(大多数颜色都围绕实际选择调色板,但在你的情况下已经处理过,所以你不能使用更流行的量化技术.)
另外,看看这个问题.
要在Cocoa中查找HSB色调,看起来您可以使用NSColor.h中声明的getHue方法.
但是,如果您只是使用这种技术将图像转换为十字绣设计,实际拼接它将非常困难.它将充满单像素色域,这有点破坏了十字绣的目的.