none
C#如何使某块图像变亮 RRS feed

  • 问题

  • 现在用C#做一个场景,假设里面有一个苹果树,一只兔子,一只狼(背景有蓝天白云绿草之类)。将鼠标移动到这苹果树上时,苹果树就有了亮度变化,让用户知道鼠标移动到了某个可以点击的区域。兔子和狼也是这种效果。而背景不变。类似flash一样。就是为了让用户知道鼠标移动到了某个可以点击的区域。请问该怎么实现呢?
    勿以恶小而为之,勿以善小而不为
    2009年8月13日 7:37

答案

  • 你好 可以针对图片 在鼠标事件中创建对图像的Graphics对象,通过这个对象来改变图像的明暗度等

    通过两张图片切换也是可以的
    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!http://hi.baidu.com/1987raymond
    • 已标记为答案 dut60 2009年8月16日 10:25
    2009年8月14日 1:29
    版主
  • 我个人看法也如此,用WinForm实现动画效果本身就比较困难,建议您使用Silverlight技术来实现!
    周雪峰
    • 已标记为答案 dut60 2009年9月5日 2:32
    2009年8月15日 4:14
    版主
  • 我个人建议你使用Silverlight,这个是专门为了实现动画效果而设计的技术!
    周雪峰
    • 已标记为答案 dut60 2009年8月16日 0:09
    • 取消答案标记 dut60 2009年8月16日 0:42
    • 已标记为答案 dut60 2009年8月16日 10:25
    2009年8月15日 13:12
    版主
  • 无论你用什么技术不重要的 解决问题才是重要的
    你可以选择升级vs2008 也可以用blend开发silverlight 你选择你感兴趣的技术来解决问题
    wpf开发 客户端必须要安装.net3.0以上版本
    silverlight 开发 客户端只要安装silverlight程序就行了
    flash 不用说了 现在90%电脑都有flash
    各有各优 你考虑最合理方式解决问题

    • 已标记为答案 dut60 2009年8月16日 10:24
    2009年8月16日 0:56

全部回复

  • 你好!
         可以通过改变图形的颜色来达到目的,设置成更“亮”一些的颜色就可以了!
         另外,也可以改变鼠标的样式来达到提醒用户的目的!
    周雪峰
    2009年8月13日 7:47
    版主
  • 那样只能用替代图片 用gdi+处理
    2009年8月13日 8:11
  • 你好!可以在这两个 Control 在 MouseEnter 事件中将图片换成更高亮的图片或将颜色改为高亮色,MouseLeve 事件是还原图片
    知识改变命运,奋斗成就人生!
    2009年8月13日 8:22
    版主
  • 多谢各位版主!如果不换图片的话,怎样把图片改为高亮色呢?我是不是只能把图片从原图中挖出来,然后用一个picturebox才可以?
    勿以恶小而为之,勿以善小而不为
    2009年8月13日 12:26
  • 一般来来说还是做两张图片进行切换,以后维护起来也不用对程序代码进行修改
    知识改变命运,奋斗成就人生!
    2009年8月13日 12:49
    版主
  • 一般来来说还是做两张图片进行切换,以后维护起来也不用对程序代码进行修改
    知识改变命运,奋斗成就人生!
    2009年8月13日 12:50
    版主
  • 切换图片开销比较大,还是建议直接改变鼠标的样式(例如把鼠标设置成手型),这样比较简单,而且不会影响性能!
    周雪峰
    2009年8月13日 15:15
    版主
  • 你好 可以针对图片 在鼠标事件中创建对图像的Graphics对象,通过这个对象来改变图像的明暗度等

    通过两张图片切换也是可以的
    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!http://hi.baidu.com/1987raymond
    • 已标记为答案 dut60 2009年8月16日 10:25
    2009年8月14日 1:29
    版主
  • 恩。这两个方法我都想到了。但是我这里的这个场景只是一个简单的例子。其实这个项目里面要做大量的图片替换,比如兔子刚才是站着的,现在卧下了。但是卧下的图片还要达到题目中所说的效果。其他类似。所以,如果通过两张图片切换的话就要每个动作做两幅明暗不同的图片,不太合理。本来我想自定义一个控件,这个控件实现这个效果(控件里面有一个picturebox,通过对picturebox中的图片每一个像素的RGB值同时加上或减去一个特定的值达到控制明暗的效果):鼠标移动到这个控件时,控件中图片变量,鼠标移开,图片成为刚才的样子。然而,这只对背景不透明的图片好用,而有背景的图片在场景中又特难看。比如明明该是兔子,却还显示着兔子图片的背景颜色。所以,觉得现在只能用GDI了。
    然而,项目中各种角色又许多动作,所以,如果全是图片拼接的话,效果肯定不好。是不是winform下用c#做这种动画效果本身就不是个明智之举?还请版主给个建议。
    勿以恶小而为之,勿以善小而不为
    2009年8月15日 1:09
  • 我个人看法也如此,用WinForm实现动画效果本身就比较困难,建议您使用Silverlight技术来实现!
    周雪峰
    • 已标记为答案 dut60 2009年9月5日 2:32
    2009年8月15日 4:14
    版主
  • 谢谢版主。但是,Silverlight不是针对浏览器的吗?我的是C/S模式的?可以使用Silverlight技术吗?
    勿以恶小而为之,勿以善小而不为
    2009年8月15日 8:36
  • Silverlight3.0已经可以脱离浏览器了啊!
    周雪峰
    2009年8月15日 10:36
    版主
  • 哦。汗!呵呵。我没有用过。网上有人建议我用flash实现这个模块,最后在.net中调用。也有人建议我用WPF。这两个我都没有底子,所以请版主建议一下,flash,wpf,silverlight,我用哪个实现更好呢?
    勿以恶小而为之,勿以善小而不为
    2009年8月15日 13:03
  • 我个人建议你使用Silverlight,这个是专门为了实现动画效果而设计的技术!
    周雪峰
    • 已标记为答案 dut60 2009年8月16日 0:09
    • 取消答案标记 dut60 2009年8月16日 0:42
    • 已标记为答案 dut60 2009年8月16日 10:25
    2009年8月15日 13:12
    版主
  • 好。谢谢啦。
    勿以恶小而为之,勿以善小而不为
    2009年8月16日 0:09
  • 我现在用的是.NET2.0,VS2005.如果用Silverlight的话,是不是必须装VS2008才行啊?
    勿以恶小而为之,勿以善小而不为
    2009年8月16日 0:11
  • 无论你用什么技术不重要的 解决问题才是重要的
    你可以选择升级vs2008 也可以用blend开发silverlight 你选择你感兴趣的技术来解决问题
    wpf开发 客户端必须要安装.net3.0以上版本
    silverlight 开发 客户端只要安装silverlight程序就行了
    flash 不用说了 现在90%电脑都有flash
    各有各优 你考虑最合理方式解决问题

    • 已标记为答案 dut60 2009年8月16日 10:24
    2009年8月16日 0:56
  •  恩。多谢。
    勿以恶小而为之,勿以善小而不为
    2009年8月16日 10:24
  • 不好意思,还想问一下,开发SILVERLIGHT具体需要什么环境?看到网上很多介绍,还不是很清楚。还是这里最权威,给个答案吧。
    勿以恶小而为之,勿以善小而不为
    2009年8月16日 10:33
  • vs2008 sp1或者微软的 blend设计工具
    2009年8月16日 11:53
  • SL 需要的环境及安装步骤
    http://social.microsoft.com/Forums/zh-CN/silverlightzhchs/thread/5c0269eb-893a-4b6d-86f8-49c6f78c8b48
    知识改变命运,奋斗成就人生!
    2009年8月16日 12:57
    版主
  • 呵呵。多谢版主指点。现在用了WPF后,确实动画效果非常好实现。项目得到了很快进展。但是,现在我说的让一个图片变量的效果还没有很好实现。我刚开始使用的是定义了样式。样式让鼠标移向图片时透明度改变。刚开始透明度为0.9.移上去后透明度改为1.但是这样透明度不为1的时候就看到了图片后面的东西。我不希望这样。有没有更好的方法啊?先谢谢啦。
    勿以恶小而为之,勿以善小而不为
    2009年9月5日 9:26