Exemplo n.º 1
0
        private void Form1_Paint(object sender, PaintEventArgs e)
        {
            const bool MULTITHREADED = true;

            Graphics   gr  = e.Graphics;
            RectangleF vcb = gr.VisibleClipBounds;

            if (MULTITHREADED)
            {
                const int DELTA = 100;

                int width  = (int)vcb.Width;
                int height = (int)vcb.Height;
                List <Tuple <Thread, BitmapFragment> > threads = new List <Tuple <Thread, BitmapFragment> >();

                for (int x = 0; x < width; x += DELTA)
                {
                    for (int y = 0; y < height; y += DELTA)
                    {
                        Thread         thread = new Thread(drawFragmentObj);
                        BitmapFragment bf     = new BitmapFragment(
                            new Bitmap(DELTA, DELTA), x, y, width, height, 0.1 * waveFadeRate.Value, gr);
                        threads.Add(new Tuple <Thread, BitmapFragment>(thread, bf));
                        thread.Start(bf);
                    }
                }

                foreach (Tuple <Thread, BitmapFragment> thread in threads)
                {
                    thread.Item1.Join();
                }
            }
            else
            {
                drawFragment(new BitmapFragment(
                                 new Bitmap((int)vcb.Width, (int)vcb.Height),
                                 0, 0, (int)vcb.Width, (int)vcb.Height,
                                 0.1 * waveFadeRate.Value, gr));
            }

            foreach (List <Tuple <float, float> > pts in allPoints)
            {
                Pen pen = pts == pointsR ? Pens.DarkRed : pts == pointsG ? Pens.DarkGreen : Pens.DarkBlue;

                foreach (Tuple <float, float> p in pts)
                {
                    gr.DrawEllipse(pen, new Rectangle
                    {
                        X      = (int)(p.Item1 * vcb.Width) - 5,
                        Y      = (int)(p.Item2 * vcb.Height) - 5,
                        Width  = 10,
                        Height = 10
                    });
                }
            }
        }
Exemplo n.º 2
0
        public List <IImageFragment> FragmentImage(Bitmap bitmap)
        {
            var toreturn = new List <IImageFragment>();

            var fragment        = new BitmapFragment(bitmap);
            var single_fragment = new ImageFragment(fragment, new Point {
                X = 0, Y = 0
            });

            toreturn.Add(single_fragment);
            return(toreturn);
        }
Exemplo n.º 3
0
        private void drawFragment(BitmapFragment bf)
        {
            for (int x = bf.dx, xl = bf.dx + bf.bm.Width; x < xl; ++x)
            {
                for (int y = bf.dy, yl = bf.dy + bf.bm.Height; y < yl; ++y)
                {
                    int r = 0, g = 0, b = 0;

                    foreach (List <Tuple <float, float> > pts in allPoints)
                    {
                        if (pts.Count > 0)
                        {
                            double wave = 0, waves = 0;

                            foreach (Tuple <float, float> p in pts)
                            {
                                int    px   = (int)(p.Item1 * bf.width);
                                int    py   = (int)(p.Item2 * bf.height);
                                double dist = distance(x, y, px, py);
                                wave += Math.Pow(bf.fadeRate, dist / 63) * Math.Cos(0.05 * dist);
                                ++waves;
                            }

                            if (pts == pointsR)
                            {
                                r = (int)(127 + 127 * (wave / waves));
                            }
                            else if (pts == pointsG)
                            {
                                g = (int)(127 + 127 * (wave / waves));
                            }
                            else
                            {
                                b = (int)(127 + 127 * (wave / waves));
                            }
                        }
                    }

                    bf.bm.SetPixel(x - bf.dx, y - bf.dy, Color.FromArgb(r, g, b));
                }
            }

            lock (bf.gr)
            {
                bf.gr.DrawImage(bf.bm, bf.dx, bf.dy);
            }
        }
Exemplo n.º 4
0
        public void AverageColorBuiltBitmap()
        {
            Bitmap b = new Bitmap(2, 2);

            b.SetPixel(0, 0, ImageProcessor.Imaging.Colors.RgbaColor.FromRgba(0, 0, 0xff, 0xff));
            b.SetPixel(0, 1, ImageProcessor.Imaging.Colors.RgbaColor.FromRgba(0, 0, 0xff, 0xff));
            b.SetPixel(1, 0, ImageProcessor.Imaging.Colors.RgbaColor.FromRgba(0, 0xff, 0xff, 0xff));
            b.SetPixel(1, 1, ImageProcessor.Imaging.Colors.RgbaColor.FromRgba(0, 0xff, 0xff, 0xff));



            var bt      = new BitmapFragment(b);
            var average = bt.AverageColor();

            Assert.AreEqual(0, average.R);
            Assert.AreEqual(0x7f, average.G);
            Assert.AreEqual(0xff, average.B);
        }
Exemplo n.º 5
0
        public List <IImageFragment> FragmentImage(Bitmap bitmap)
        {
            var toreturn   = new List <IImageFragment>();
            var xtilecount = Math.Floor(bitmap.Size.Width / 16.0);
            var ytilecount = Math.Floor(bitmap.Size.Height / 16.0);

            for (var xtilenr = 0; xtilenr < xtilecount; xtilenr++)
            {
                for (var ytilenr = 0; ytilenr < ytilecount; ytilenr++)
                {
                    var position   = new Point(xtilenr * 16, ytilenr * 16);
                    var size       = new Size(new Point(16, 16));
                    var sub_bitmap = bitmap.Clone(new Rectangle(position, size), bitmap.PixelFormat);

                    var fragment        = new BitmapFragment(sub_bitmap);
                    var single_fragment = new ImageFragment(fragment, position);

                    toreturn.Add(single_fragment);
                }
            }

            return(toreturn);
        }