如何更改复杂图形的颜色?

时间:2010-06-10 15:18:38

标签: android

我想在Android应用程序中使用Adobe Illustrator中的图形(比如猫)。我希望用户能够使用颜色选择器更改毛发的颜色。我可以将图形保存为(SVG?)以允许我以编程方式控制Android应用程序的颜色?我是否必须为猫的每种颜色设置单独的图像?

5 个答案:

答案 0 :(得分:5)

您不需要多个图像 - 您可以使用单个图像执行此操作 - 使用目标平台支持的任何格式。 Android支持PNG,GIF和JPG - 我会选择PNG或JPG,并选择JPG,因为这可能是一张照片。

假设现有图像有颜色(即不是黑色或白色毛发),您​​可以通过

更改毛发的颜色
  • 为图像着色 - 这会强制所有颜色成为给定的色调
  • 色调偏移 - 这会将所有颜色的色调移动一定量

实现这一点。您可以使用jjil - Jon's imaging library - 针对具有Android特定支持的移动设备。

要实现上述两种转换,请按以下步骤操作:

  1. 首先使用HSV管道阶段
  2. 将图片转换为RgbHsv
  3. 将所需的毛发颜色RGB转换为HSV(例如需要红色毛发,将rgb(红色)转换为hsv(红色)。(Example code。)
  4. 然后您选择了如何修改图像颜色 - 通过将每个像素的H(色调)设置为与所需毛发颜色相同的色调值(从步骤2开始),或者将所选色调的差异添加到图像像素色调(模数255)以获得色调偏移。您也可以缩放V值以提供更浅或更深的毛发色调。
  5. 然后将图像的HSV值转换回rgb。 jjil库中似乎没有HsvRgb过滤器,但这可以作为RgbHsv的反转来实现。这是一个HSV2RGB函数。
  6. 如果图像中还有其他颜色很重要,则可以保留这些颜色不受影响,仅将变换应用于图像中的特定颜色。您检查当前的HSV值,如果色调,S或V值超出您不想修改的值,那么您只是不更改这些值。例如,如果猫有绿眼睛和棕色皮毛,你跳过HSV值,其中H表示它是绿色 - 留下那种颜色,眼睛不变。

答案 1 :(得分:5)

还有一个简单的混色技巧,无需触摸像素数据。只需保存具有偏移颜色的图像的多个版本,将它们读入应用程序,覆盖它们并使用alpha混合在它们之间进行混合。通过这种方式,您可以在不需要太多工作的情(我已经完成了,而不是在Android上。)

回复评论,以便我有更多空间:是的,三张R / G / B图像可以使用。如果您想要更多颜色选项,可以准备六张图像,色调相互旋转60度(60/120/180/240/300/360)。这可以在您选择的位图编辑器中轻松完成,这就是Hue / Saturation对话框在Pixelmator中的样子:

Hue shift http://zoul.fleuron.cz/tmp/hue.jpg

然后你只需要一次显示其中两个,将下面的alpha保持为1并将上面的alpha从0更改为1.当你达到1时,你隐藏下面的图像并在前景中显示下一个α。重复自由采访。这将为您提供充足的色调,混合均匀,工作量小。

答案 2 :(得分:0)

您可以使用具有索引颜色调色板的任何图像格式。 GIF是一个很好的例子,JPEG不是。

然后只需修改文件内图像调色板字节,就可以更改毛发颜色。

Wikipedia GIF图像格式文章介绍了文件调色板数据的位置和格式。

答案 3 :(得分:0)

如果您正在谈论线条艺术,那么SVG是一个不错的选择,因为嵌入在XHTML中,它的属性可以通过Javascript在Gecko或Webkit中编写脚本。然后,您可以仅定位头发节点并实时设置颜色属性。

SVG还支持引用和克隆,因此您可能只需要在一个地方更改颜色并设置所有头发节点以继承它。

添加链接:https://launchpad.net/libsvg-android

答案 4 :(得分:0)

只需要一个覆盖在用户控制的纯色层上的alpha图像。