现在想做一个小游戏
想实现选择颜色来改变原来发型的颜色就像UO(网络创世纪 不知道大家有没有玩过)里面一样,
现在好多游戏也都可以选择发型和发色,我认为他们都是一个图片,
然后通过程序来进行染色的。

解决方案 »

  1.   

    这样的实现不是通过“染色”来实现的,一般的代码实现都是准备了很多发色发型的Image图片,然后通过你的选择(鼠标点击监听/按钮监听)来查找对应的Image然后改变主窗体中人物的发型发色。
    如果真想实现“染色”的功能的话楼主可以参考下Graphics类,里面提供了图形重绘的方法,你提出的要求只要监听你所选择的颜色然后使用重绘线程改变重绘线程中Color的颜色就可以了.
      

  2.   

    谢谢楼上的 但没解决我的问题
    我想要的就是怎么通过ImageObserve来实现对灰色的发型图片颜色的改变
    跟监听什么没关系有熟悉DELPHI的没 有人用DELPHI写出来了 但我不会DELPHI程序:http://uo.stratics.com/heptazane/characterviewer/uocview.zip
    源码:http://uo.stratics.com/heptazane/characterviewer/uoccode.zip
    程序需要UO的客户端
    客户端:http://zjuo.chinauo.com/Ultima%20Online.rar
      

  3.   

    监听是必须得,通过事件触发更改图片或setcolor改变。看你原来的图片是IMG还是graphics画出来的。
      

  4.   

    不用说监听啊 这块我明白
    我想知道的是 图片是PNG格式的 程序读进来是BUUFERIMAGE
    然后我就想通过一些算法将图片染色(比如染成黑色或红色)用graphics画上去
    我想知道的就是这个算法  大家不要再扯监听了。
      

  5.   

       楼主我觉得你要这样的处理的话还是直接IMG贴好,要是用ImageObserve实现“染色”效果的话肯定还得在imageUpdate获取头发的区域轮廓然后根据轮廓计算复杂图形进行色彩填充,这样用到graphics还有区域算法。
        这里我还是推荐楼主用一个二维数组或者HashMap和List存放发型和发色,比方说二维数组横向是同一发色不同发型,纵向是同一发型不同发色。或者HashMap中以发型为key,以一个ArrayList存放发色。变哪个就掉那个方便多了。
      

  6.   

    这个算法需要用到的是区域算法,挺复杂的。
    1.首先,你要判定发型的区域,计算发型区域边缘各个点。(这点网上搜区域算法,好像涉及矩阵)
    2.根据上述获得的复杂多边形区域的矩阵表示进行graphics的填充。
    大概就是这么个路子,具体算法有很长的文章介绍的,这不说了。