WPF 特效

大海啊全是水 2010-03-31 04:50:51
我想要做鼠标在窗口划过,就象水桨在湖面划过一样,有水纹荡起的特效...
没有思路,请大侠们指路..
...全文
556 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
TimDavid 2010-04-01
  • 打赏
  • 举报
回复
这特效
有点想唱《让我们荡起双桨》
的冲动....
mjay0210 2010-04-01
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 tianhaoma8888 的回复:]
引用 3 楼 mjay0210 的回复:
你演话剧啊。。

非也...我昨天的那问题解决了...没有人来捧场,无法结帖.
然后今天把帖子重新编辑了下,重新问个问题...呵呵
[/Quote]

把你WPF的代码贴一下把。看看
mjay0210 2010-04-01
  • 打赏
  • 举报
回复
楼上那个是个类库啊

给个图片给个位置 给做个水波纹理图形。。。。
这效率不是一般低真的。。
大海啊全是水 2010-04-01
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zengzhan 的回复:]
C#实现的水纹特效 http://www.cnblogs.com/zengxiangzhan/archive/2009/11/03/1595281.html
[/Quote]

呵呵 我也找到了一篇 两篇应该是一样的
http://dev.gameres.com/Program/Visual/2D/2DWater.htm
我还在看...希望了OK
大海啊全是水 2010-04-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 mjay0210 的回复:]
你演话剧啊。。
[/Quote]
非也...我昨天的那问题解决了...没有人来捧场,无法结帖.
然后今天把帖子重新编辑了下,重新问个问题...呵呵
qqzeng-ip 2010-04-01
  • 打赏
  • 举报
回复
mjay0210 2010-04-01
  • 打赏
  • 举报
回复
你演话剧啊。。
大海啊全是水 2010-04-01
  • 打赏
  • 举报
回复
就象TortoiseSVN->TortoiseMerge->Help->About TortoiseMerge...里面的特效.
大海啊全是水 2010-04-01
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 mjay0210 的回复:]
楼上那个是个类库啊

给个图片给个位置 给做个水波纹理图形。。。。
这效率不是一般低真的。。
[/Quote]

我找到的代码C#的 他用System.Windows.Form.PictureBox 控件,
我想直接用WPF里面的Image, 我虽然改了下,现在可以运行,还得再弄弄
我觉得这代码的效率还可以

using System;
using System.Drawing;
using System.Drawing.Imaging;

namespace WaterWave
{
public sealed unsafe class WaterWave : IDisposable
{
private Bitmap _orgImage = null;
private Bitmap _newImage = null;
private BitmapData _orgData = null;
private byte* _pOrgBase;
private int _width;
private int[,] _buf1, _buf2;
private int _rippleCount = int.MaxValue;

public WaterWave(Bitmap bitmap)
{
_orgImage = (Bitmap)bitmap.Clone();
_newImage = (Bitmap)bitmap.Clone();
Width = bitmap.Width;
Height = bitmap.Height;
_orgData = _orgImage.LockBits(new Rectangle(0, 0, Width, Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
_pOrgBase = (byte*)_orgData.Scan0.ToPointer();
_width = Width * 3;
if(_width % 4 != 0)
_width = 4 * (_width / 4 + 1);

_buf1 = new int[Width, Height];
_buf2 = new int[Width, Height];
}

/// <summary>
/// 图片宽度
/// </summary>
public int Width { get; private set; }
/// <summary>
/// 图片高度
/// </summary>
public int Height { get; private set; }

/// <summary>
/// 扩散
/// </summary>
private void RippleSpread()
{
for(int i = 1;i < Width - 1;i++)
for(int j = 1;j < Height - 1;j++)
{
_buf2[i, j] = ((_buf1[i - 1, j] + _buf1[i + 1, j] + _buf1[i, j - 1] + _buf1[i, j + 1]) >> 1) - _buf2[i, j];
_buf2[i, j] -= _buf2[i, j] >> 5;
}
int[,] t = _buf1;
_buf1 = _buf2;
_buf2 = t;
}
/// <summary>
/// 重绘
/// </summary>
private void RenderRipple()
{
_newImage = new Bitmap(Width, Height);
BitmapData newData = _newImage.LockBits(new Rectangle(0, 0, Width, Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
byte* pBase = (byte*)newData.Scan0.ToPointer();
int dx, dy;
for(int i = 1;i < Width - 1;i++)
for(int j = 1;j < Height - 1;j++)
{
dx = _buf1[i, j - 1] - _buf1[i, j + 1];
dy = _buf1[i - 1, j] - _buf1[i + 1, j];
if(i + dx < 0 || i + dx >= Width || j + dy < 0 || j + dy >= Height)
continue;
//fmap.SetColor(i, j, FastOriginal.GetColor(i + dx, j + dy));
*(pBase + j * _width + i * 3) = *(_pOrgBase + (j + dy) * _width + (i + dx) * 3);
*(pBase + j * _width + i * 3 + 1) = *(_pOrgBase + (j + dy) * _width + (i + dx) * 3 + 1);
*(pBase + j * _width + i * 3 + 2) = *(_pOrgBase + (j + dy) * _width + (i + dx) * 3 + 2);
}
_newImage.UnlockBits(newData);
}
/// <summary>
/// 增加波源
/// </summary>
/// <param name="point"></param>
/// <param name="deep"></param>
public void DropStone(Point point)
{
_buf1[point.X, point.Y] -= 100;
_rippleCount = 90;
}

/// <summary>
/// 获取当前一帧图像
/// </summary>
/// <returns></returns>
public Bitmap GetFrame()
{
if(_rippleCount > 0)
{
RippleSpread();
RenderRipple();
_rippleCount--;
}
return _newImage;
}

#region IDisposable Members

public void Dispose()
{
if(_orgData != null)
_orgImage.UnlockBits(_orgData);
_orgData = null;
}

#endregion
}
}

大海啊全是水 2010-03-31
  • 打赏
  • 举报
回复
哦,设置了Canvas的宽和高就可以拉,哈哈

110,545

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧