我目前正在使用 C++ 读取我的 8 位位图并保存其像素数据和颜色表。我目前将我的颜色表存储在一个数组中:
RGBQUAD* colours;
我想知道如何在各个方向上找到最近的唯一像素颜色并将位图裁剪到该像素。我正在使用没有任何外部库的 C++。
我目前正在使用 C++ 读取我的 8 位位图并保存其像素数据和颜色表。我目前将我的颜色表存储在一个数组中:
RGBQUAD* colours;
我想知道如何在各个方向上找到最近的唯一像素颜色并将位图裁剪到该像素。我正在使用没有任何外部库的 C++。
我建议使用现成的库,例如ImageMagick,而不是尝试重新实现那个特定的轮子。
您要实现在其他地方已经实现得很好的东西只有两个原因:1)家庭作业,或 2)您认为您实际上可以比现有代码做得更好。
不能是 1)因为没有“作业”标签,也不能是 2)因为你不必问,那么......
“最近的唯一像素颜色”是指颜色空间中最近的?是绝对意义上的(R/G/B)还是人类意义上的?那么,鉴于您#0002FE
可能会#0000FF
在您的颜色表中找到?
“标准”的简单 C++ 方法是std::min_element()
,它接受一个范围和一个谓词。在您的情况下,该范围是您的颜色表,谓词是您想要的颜色的接近度。例如[targetColor](RGBQUAD tableEntry) { return abs(RGBdiff(tableEntry, targetColor)); }