Beispiel #1
0
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            //Set the Image to fill the canvas.
            W             = (int)Canvas1.ActualWidth;
            H             = (int)Canvas1.ActualHeight;
            Center        = new Vector(W / 2, H / 2);
            Image1.Width  = W;
            Image1.Height = H;
            maxDistance   = W / 4;
            Stride        = (int)(Image1.Width * PixelFormats.Rgb24.BitsPerPixel / 8);
            //Create the list of Colors.
            ColorPalette pal = new ColorPalette(Environment.CurrentDirectory + "\\ThermalGrayScale.cpl");

            my_Colors = pal.GetColors((int)maxDistance);
        }
Beispiel #2
0
        private void WorleyNoise()
        {
            Color my_Color;

            PixelData = new byte[(int)(Stride * Image1.Height)];
            //Create the seed points
            Seeds = new List <Point>();
            for (int I = 0; I < SeedCount; I++)
            {
                Seeds.Add(new Point(Rnd.NextDouble() * Canvas1.ActualWidth, Rnd.NextDouble() * Canvas1.ActualHeight));
            }
            if (UseColor)
            {
                double[] distances = new double[SeedCount];
                byte     R, G, B;
                for (int X = 0; X < W; X++)
                {
                    for (int Y = 0; Y < H; Y++)
                    {
                        for (int I = 0; I < SeedCount; I++)
                        {
                            distances[I] = Math.Sqrt((Seeds[I].X - X) * (Seeds[I].X - X) + (Seeds[I].Y - Y) * (Seeds[I].Y - Y));
                        }
                        Array.Sort(distances);
                        if (distances[0] > maxDistance)
                        {
                            distances[0] = maxDistance - 1;
                        }
                        if (distances[1] > maxDistance)
                        {
                            distances[1] = maxDistance - 1;
                        }
                        if (distances[2] > maxDistance)
                        {
                            distances[2] = maxDistance - 1;
                        }
                        R = (byte)(255 * (maxDistance - distances[1]) / maxDistance);
                        G = (byte)(255 * (maxDistance - distances[2]) / maxDistance);
                        B = (byte)(255 * (maxDistance - distances[0]) / maxDistance);

                        my_Color = Color.FromRgb(R, G, B);
                        SetPixel(X, Y, my_Color, PixelData, Stride);
                    }
                }
            }
            else
            {
                double[]     distances = new double[SeedCount];
                ColorPalette pal       = new ColorPalette(Environment.CurrentDirectory + "\\ThermalGrayScale.cpl");
                List <Color> my_Colors = pal.GetColors((int)maxDistance);
                for (int X = 0; X < W; X++)
                {
                    for (int Y = 0; Y < H; Y++)
                    {
                        for (int I = 0; I < SeedCount; I++)
                        {
                            distances[I] = Math.Sqrt((Seeds[I].X - X) * (Seeds[I].X - X) + (Seeds[I].Y - Y) * (Seeds[I].Y - Y));
                        }
                        Array.Sort(distances);
                        if (distances[0] > maxDistance)
                        {
                            distances[0] = maxDistance - 1;
                        }
                        my_Color = my_Colors[(int)(maxDistance - distances[0])];
                        SetPixel(X, Y, my_Color, PixelData, Stride);
                    }
                }
            }

            bitmap        = BitmapSource.Create(W, H, 96, 96, PixelFormats.Rgb24, null, PixelData, Stride);
            Image1.Source = bitmap;
        }