我有一个类(Color),带有一堆用于颜色处理的函数。我有一个单独的函数来返回图像颜色的数组。
彩色调色板功能已成功运行 - 将数组输出到$ pallette。
如果没有循环,我可以手动将$ palletteColor var设置为十六进制,getClosestMatch函数返回与参考数组最接近的颜色。一切都很好。
当我把它放到一个循环中时,我得不到正确的结果 - 看起来每个循环的返回是相同的,所以我从getClosestMatch得到10个相同的值。 $ palette来自类外的函数,因此仍然可以运行。 - 编辑:澄清 - $ pallette数组值不相同 - 请参阅下面的var_dump。
我想我可能误解了创建新类对象的工作原理或应该如何影响返回的变量。任何人都可以了解这个过程应该如何运作?
EDIT! 基于以下...当我用硬编码单值测试时,它是一个整数(0x003cfe)。在循环中我添加('0x'。$ palleteColor)。这会使它成为一个字符串吗?我如何构建它作为测试的int?
foreach($palette as $palleteColor)
{
$color1 = new Color('0x'.$palleteColor);
$closestmatch = $color1->getClosestMatch($colors);
echo "<tr><td style='background-color:#$palleteColor;width:2em;'>
</td><td>#$palleteColor $closestmatch</td></tr>\n";
}
Class构造函数:
public function __construct($intColor = null)
{
if ($intColor) {
$this->fromInt($intColor);
}
}
fromINT函数:
public function fromInt($intValue)
{
$this->color = $intValue;
return $this;
}
getClosestMatch函数:
public function getClosestMatch(array $colors)
{
$matchDist = 15;
$matchKey = null;
foreach($colors as $key => $color) {
if (false === ($color instanceof Color)) {
$c = new Color($color);
}
$dist = $this->getDistanceLabFrom($c);
if ($dist < $matchDist) {
$matchDist = $dist;
$matchKey = $key;
}
}
echo $dist;
return $matchKey;
}
$ pallette的var_dump:
array(10) { [0]=> string(6) "ffffff" [1]=> string(6) "ff3333"
[2]=> string(6) "cc3333" [3]=> string(6) "ff6666" [4]=> string(6) "cc6666"
[5]=> string(6) "ffcccc" [6]=> string(6) "ffffcc" [7]=> string(6) "ff9999"
[8]=> string(6) "ff6633" [9]=> int(993333) }
答案 0 :(得分:-1)
问题解决了:
最初使用硬编码值进行测试 -
$color1 = new Color(0x003cfe)
使用的循环版本:
$color1 = new Color('0x'$palleteColor);
这使得字符串不是整数 修正:
$color1 = new Color(hexdec($palleteColor));
谢谢大家。