水滴が付いたガラス越しに景色を見るWPF


水滴が付いたガラス越しに景色を見た写真がきれいだったので、WPFで作ってみた。

20070812 026

オリジナルの画像。

作り方

  • 背景

BlurEffect Radius=”15″ ぐらいでぼかす。

  • 水滴の作り方:

Ellipse に同じ画像を貼り付けて、180°回転させて、DropShadowEffectをつける。Ellipse は少し縦長にしてあげる。あとは、水滴をランダムに配置してあげる。水滴は重ならないので、重ならないように配置する。

image

意外とそれっぽく見える。とりあえず、実験用コードをメモっておく。重なり判定はしていません。

using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using System.Windows.Media.Effects;

        BitmapImage bi = new BitmapImage(new Uri(“pack://siteoforigin:,,,/20070812 026.jpg”));

        private void Doit()
        {
            for(int i = 0; i < 100; i++)
                CreateRaindrop();
        }

        private void CreateRaindrop()
        {
            Ellipse raindrop = new Ellipse();
            var effect = new DropShadowEffect();
            effect.Direction = 120;
            effect.Opacity = 0.5;
            raindrop.Effect = effect;
            raindrop.Width = 35;
            raindrop.Height = 40;
            raindrop.RenderTransform = GetTransform(GetRnd(0.5));
            raindrop.Fill = new ImageBrush(bi);
            raindrop.Margin = new Thickness(GetRnd(1200) – 650, GetRnd(800) – 400, 0, 0);

            this.MainGrid.Children.Add(raindrop);
        }

        static Random rnd = new Random();
 
        static double GetRnd(double range)
        {
            return (rnd.NextDouble() * range);
        }
       
        private TransformGroup GetTransform(double size)
        {
            var tg = new TransformGroup();
            var st = new ScaleTransform(size, size);
            var rot = new RotateTransform(180);

            tg.Children.Add(st);
            tg.Children.Add(rot);
 
            return tg;
        }
    }
}

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中


%d人のブロガーが「いいね」をつけました。