检索颜色选择器上的像素颜色时出现问题

时间:2010-09-28 23:07:06

标签: actionscript-3 color-picker

我目前正在制作一个颜色选择器(非常标准的颜色选择器,与目前较少选项的photoshop几乎相同:仍处于早期阶段)。以下是实际情况的图片:http://i.stack.imgur.com/oEvJW.jpg

问题是:要检索颜色选择器下面的像素的颜色(小的,另一个是鼠标),我有这条线,我认为会这样做:

_currentColor = Convert.hsbToHex(new HSB(0,
  ((_colorSelector.x + _colorSelector.width/2)*100)/_largeur,
  ((_colorSelector.y + _colorSelector.height/2)*100)/_hauteur
));

为了澄清代码,我只是使用选择器的坐标来创建一个新的HSB颜色(饱和度表示在X轴上,亮度(值)表示在这种颜色选择器的Y轴上)。然后我将此HSB颜色转换为十六进制并将其分配给属性。此刻的色调总是设置为0,但这是无关紧要的,因为我只使用纯红色进行测试。

它可以部分地完成我想要的操作,但是大多数角落都会反转返回的颜色值: 对于(0,0),它应该返回0xFFFFFF,但它返回0x000000 对于(256,0),它应该返回0xFF0000,但它返回0x000000 对于(0,256),它应该返回0x000000,但它返回0xFFFFFF 对于(256,256),它应该返回0x000000,但它返回0xFF0000而不是

我在代码中尝试了很多变体,但我似乎无法正确修复它。任何回复/建议都非常欢迎!

3 个答案:

答案 0 :(得分:0)

我认为错误(或其中一个)使用0..256范围内的值似乎会导致溢出,请尝试使用0..255。

答案 1 :(得分:0)

只需交换X和Y轴即可解决。

答案 2 :(得分:0)

假设注册点居中,这似乎就是你做的事情:

(_colorSelector.x + _colorSelector.width/2)

我认为你的公式应该是这样的:

(_colorSelector.x + _colorSelector.width/2) / _colorSelector.width

如果您的注册点位于(0,0),则应该只是:

(_colorSelector.x / _colorSelector.width);

以上内容应该为您提供0...1

范围内的数字

此外,您应该将此值反转为亮度(因为低y值表示高亮度和高y值,低亮度;因此亮度沿y轴减小,而饱和度沿x轴增加)。所以对于你的y轴你应该这样做:

1 - ((_colorSelector.y + _colorSelector.height/2) / _colorSelector.height)

(再次,假设注册点居中)。

如果你的转换函数需要百分比,那么你应该乘以100

(_colorSelector.x + _colorSelector.width/2) / _colorSelector.width * 100
(1 - ((_colorSelector.y + _colorSelector.height/2) / _colorSelector.height)) * 100
但是,也许我错过了一些东西。我不确定_largeur_hauteur来自何处,但看起来这些是宽度和高度。我认为你应该使用_colorSelector的高度和宽度,但我可能是错的。

PS :我希望你能得到这个想法,因为我没有编译上面的代码,也许我搞砸了一些括号或者做了一些其他愚蠢的错误。

相关问题