public void filter_RGB_Mode(ImageManipulatorType.Name color)
        {
            // letztes zwischengespeichertes Bild holen
            PixelState    state  = PixelState.getInstance();
            I_ImageObject imgObj = state.get_last();
            // Vergleichsliste mit RGB Klassen Typen erstellen
            List <ImageManipulatorType.Name> container = new List <ImageManipulatorType.Name>();

            container.Add(ImageManipulatorType.Name.RGB_BLUE);
            container.Add(ImageManipulatorType.Name.RGB_RED);
            container.Add(ImageManipulatorType.Name.RGB_GREEN);

            // wenn das letzte zwischengespeicherte Bild mit dieser funktion verändert wurde
            if (container.Contains(imgObj.get_ImageManipulatorType()))
            {
                /* dann diese Veränderung rückgängig machen, da ansonsten das Bild schwarz wird.
                 * 2 aufeinander folgende Kanal filter => schwarzes bild, da jeweils 2 Farbkanäle
                 * pro Funktions aufruf auf 0 gesetzt werden. Nach 2 Funktionsaufrufen sind also
                 * alle Kanäle 0 was schwarzes Bild ergibt.
                 */
                this.undo();
            }

            state.add(new ImageObject(pic.Image, color));

            ThreadHandler thHandler = new ThreadHandler(threads);

            new ImageManipulator((Bitmap)pic.Image, color, thHandler).perform();
            this.show_picture(thHandler);
        }
Example #2
0
 public ImageManipulator(Bitmap bitmap, ImageManipulatorType.Name filter, ThreadHandler thHandler, int[] values = null)
 {
     this.bitmap    = bitmap;
     this.filter    = filter;
     this.thHandler = thHandler;
     this.values    = values;
 }
 public ThreadHandler(int threads)
 {
     this.threads = threads;
     alive        = new ArrayList(threads);
     this.startTime();
     _object = this;
 }
 public void filter(ImageManipulatorType.Name name)
 {
     PixelState.getInstance().add(new ImageObject(pic.Image, name));
         ThreadHandler thHandler = new ThreadHandler(threads);
         new ImageManipulator((Bitmap)pic.Image, name, thHandler).perform();
         this.show_picture(thHandler);
 }
        public void filter_RGB_Mode( ImageManipulatorType.Name color )
        {
            // letztes zwischengespeichertes Bild holen
            PixelState state = PixelState.getInstance();
            I_ImageObject imgObj = state.get_last();
                // Vergleichsliste mit RGB Klassen Typen erstellen
            List<ImageManipulatorType.Name> container = new List<ImageManipulatorType.Name>();
            container.Add(ImageManipulatorType.Name.RGB_BLUE);
            container.Add(ImageManipulatorType.Name.RGB_RED);
            container.Add(ImageManipulatorType.Name.RGB_GREEN);

                // wenn das letzte zwischengespeicherte Bild mit dieser funktion verändert wurde
            if (container.Contains(imgObj.get_ImageManipulatorType()))
            {
                    /* dann diese Veränderung rückgängig machen, da ansonsten das Bild schwarz wird.
                     * 2 aufeinander folgende Kanal filter => schwarzes bild, da jeweils 2 Farbkanäle
                     * pro Funktions aufruf auf 0 gesetzt werden. Nach 2 Funktionsaufrufen sind also
                     * alle Kanäle 0 was schwarzes Bild ergibt.
                     */
                this.undo();
            }

            state.add(new ImageObject(pic.Image, color));

            ThreadHandler thHandler = new ThreadHandler(threads);
            new ImageManipulator((Bitmap)pic.Image, color, thHandler).perform();
            this.show_picture(thHandler);
        }
        public void filter(ImageManipulatorType.Name name)
        {
            PixelState.getInstance().add(new ImageObject(pic.Image, name));
            ThreadHandler thHandler = new ThreadHandler(threads);

            new ImageManipulator((Bitmap)pic.Image, name, thHandler).perform();
            this.show_picture(thHandler);
        }
        public void filter_Sample_Board(int count)
        {
            PixelState state = PixelState.getInstance();

            state.add(new ImageObject(pic.Image, ImageManipulatorType.Name.SAMPLE_BOARD));
            ThreadHandler thHandler = new ThreadHandler(threads);

            int[] colors = new int[1] {
                count
            };
            new ImageManipulator((Bitmap)pic.Image, ImageManipulatorType.Name.SAMPLE_BOARD, thHandler, colors).perform();
            this.show_picture(thHandler);
        }
        public void ImageManipulatorConstructorTest()
        {
            Bitmap bitmap = new Bitmap(10, 10);
            ImageManipulatorType.Name filter = ImageManipulatorType.Name.GRAYSCALE; // TODO: Passenden Wert initialisieren
            int threads = 2; // TODO: Passenden Wert initialisieren
            ThreadHandler thHandler = new ThreadHandler(threads);
            ImageManipulator t = new ImageManipulator(bitmap, filter, thHandler); // TODO: Passenden Wert initialisieren
            PrivateObject param0 = new PrivateObject(t); // TODO: Passenden Wert initialisieren
            ImageManipulator_Accessor target = new ImageManipulator_Accessor(param0);

            Assert.IsNotNull( target.bitmap);
            Assert.IsNotNull(target.thHandler);
            Assert.IsNotNull(target.filter);
        }
 public void computeHeightStepsTest()
 {
     Bitmap bitmap = new Bitmap(10, 10);
     ImageManipulatorType.Name filter = ImageManipulatorType.Name.GRAYSCALE; // TODO: Passenden Wert initialisieren
     int threads = 2; // TODO: Passenden Wert initialisieren
     ThreadHandler thHandler = new ThreadHandler(threads);
     ImageManipulator t = new ImageManipulator(bitmap, filter, thHandler); // TODO: Passenden Wert initialisieren
     PrivateObject param0 = new PrivateObject(t); // TODO: Passenden Wert initialisieren
     ImageManipulator_Accessor target = new ImageManipulator_Accessor(param0);
     int height = 10; // TODO: Passenden Wert initialisieren
     int expected = 5; // TODO: Passenden Wert initialisieren
     int actual;
     actual = target.computeHeightSteps(height);
     Assert.AreEqual(expected, actual);
 }
        public Manipulate(Bitmap b, System.IntPtr Scan0, int stride, int height_start, int height_end, ThreadHandler thInfo, int[] values = null)
        {
            this.bitmap = b;
            this.Scan0 = Scan0;
            this.stride = stride;
            this.height_start = height_start;
            this.height_end = height_end;
            this.thInfo = thInfo;
            this.values = values;
            lock (_locker)
            {
                this.bitmap_height = b.Height;
                this.bitmap_width = b.Width;
            }

            nOffset = stride - (bitmap_width * (int)Config.value.BITMAP_OFFSET_MULTIPLIKATOR);
        }
        public Manipulate(Bitmap b, System.IntPtr Scan0, int stride, int height_start, int height_end, ThreadHandler thInfo, int[] values = null)
        {
            this.bitmap       = b;
            this.Scan0        = Scan0;
            this.stride       = stride;
            this.height_start = height_start;
            this.height_end   = height_end;
            this.thInfo       = thInfo;
            this.values       = values;
            lock (_locker)
            {
                this.bitmap_height = b.Height;
                this.bitmap_width  = b.Width;
            }


            nOffset = stride - (bitmap_width * (int)Config.value.BITMAP_OFFSET_MULTIPLIKATOR);
        }
        public override Manipulate create(ImageManipulatorType.Name name, Bitmap bitmap, System.IntPtr Scan0, int stride, int height_start, int height_end, ThreadHandler thHandler, int[] values)
        {
            switch (name)
            {

                case ImageManipulatorType.Name.INVERT:
                    return new InvertFilter(bitmap, Scan0, stride, height_start, height_end, thHandler, values);

                case ImageManipulatorType.Name.OSCILLATION:
                    return new OscillationFilter(bitmap, Scan0, stride, height_start, height_end, thHandler, values);

                case ImageManipulatorType.Name.GRAYSCALE:
                    return new GrayscaleFilter(bitmap, Scan0, stride, height_start, height_end, thHandler, values);

                case ImageManipulatorType.Name.BLACKWHITE:
                    return new BlackWhiteFilter(bitmap, Scan0, stride, height_start, height_end, thHandler, values);

                case ImageManipulatorType.Name.ERROR_DIFFUSION:
                    return new ErrorDiffusionFilter(bitmap, Scan0, stride, height_start, height_end, thHandler, values);

                case ImageManipulatorType.Name.SEPIA:
                    return new SepiaFilter(bitmap, Scan0, stride, height_start, height_end, thHandler, values);

                case ImageManipulatorType.Name.SAMPLE_BOARD:
                    return new SampleBoardFilter(bitmap, Scan0, stride, height_start, height_end, thHandler, values);

                case ImageManipulatorType.Name.RGB_RED:
                    return new RGB_ModeFilter(bitmap, Scan0, stride, height_start, height_end, thHandler, ImageManipulatorType.Name.RGB_RED);

                case ImageManipulatorType.Name.RGB_GREEN:
                    return new RGB_ModeFilter(bitmap, Scan0, stride, height_start, height_end, thHandler, ImageManipulatorType.Name.RGB_GREEN);

                case ImageManipulatorType.Name.RGB_BLUE:
                    return new RGB_ModeFilter(bitmap, Scan0, stride, height_start, height_end, thHandler, ImageManipulatorType.Name.RGB_BLUE);

            }

            throw (new FilterUndefinedException("Selected filter is not defined in FilterFactory class!"));
        }
 public ErrorDiffusionFilter(Bitmap b, System.IntPtr Scan0, int stride, int height_start, int height_end, ThreadHandler thInfo, int[] values)
     : base(b, Scan0, stride,height_start, height_end, thInfo)
 {
 }
Example #14
0
 public ImageManipulater(Bitmap b, ImageManipulaterType.Name filter, ThreadHandler thHandler)
 {
     this.b         = b;
     this.filter    = filter;
     this.thHandler = thHandler;
 }
Example #15
0
 public RGB_Mode(Bitmap b, System.IntPtr Scan0, int stride, int height_start, int height_end,
                 ThreadHandler thInfo, ImageManipulatorType.Name color_type)
     : base(b, Scan0, stride, height_start, height_end, thInfo)
 {
     this.color_type = color_type;
 }
Example #16
0
 public SepiaFilter(Bitmap b, System.IntPtr Scan0, int stride, int height_start, int height_end, ThreadHandler thInfo, int[] values)
     : base(b, Scan0, stride, height_start, height_end, thInfo)
 {
 }
 public InvertFilter(Bitmap b, System.IntPtr Scan0, int stride, int height_start, int height_end, ThreadHandler thInfo)
     : base(b, Scan0, stride,height_start, height_end, thInfo)
 {
 }
 public RGB_ModeFilter(Bitmap b, System.IntPtr Scan0, int stride, int height_start, int height_end,
                 ThreadHandler thInfo, ImageManipulatorType.Name color_type)
     : base(b, Scan0, stride,height_start, height_end, thInfo)
 {
     this.color_type = color_type;
 }
 public void filter_Sample_Board( int count )
 {
     PixelState state = PixelState.getInstance();
     state.add(new ImageObject(pic.Image, ImageManipulatorType.Name.SAMPLE_BOARD));
     ThreadHandler thHandler = new ThreadHandler(threads);
     int[] colors = new int[1] { count };
     new ImageManipulator((Bitmap)pic.Image, ImageManipulatorType.Name.SAMPLE_BOARD, thHandler, colors).perform();
     this.show_picture(thHandler);
 }
 private void show_picture(ThreadHandler thHandler)
 {
     thHandler.refresh(pic);
     mainForm.setInfoBox(threads, thHandler.getTime());
 }
        /*
        public Manipulate perform(ImageManipulatorType.Name name, Bitmap bitmap, System.IntPtr Scan0, int stride, int height_start, int height_end, ThreadHandler thHandler, int[] values)
        {

            return create(name, bitmap, Scan0, stride, height_start, height_end, thHandler, values);
        }
         */
        public abstract Manipulate create(ImageManipulatorType.Name name, Bitmap bitmap, System.IntPtr Scan0, int stride, int height_start, int height_end, ThreadHandler thHandler, int[] values);
 public SampleBoardFilter(Bitmap b, System.IntPtr Scan0, int stride, int height_start, int height_end, ThreadHandler thInfo, int[] values)
     : base(b, Scan0, stride,height_start, height_end, thInfo, values)
 {
 }
 private void show_picture(ThreadHandler thHandler)
 {
     thHandler.refresh(pic);
     mainForm.setInfoBox(threads, thHandler.getTime());
 }
        /*
         * public Manipulate perform(ImageManipulatorType.Name name, Bitmap bitmap, System.IntPtr Scan0, int stride, int height_start, int height_end, ThreadHandler thHandler, int[] values)
         * {
         *
         *  return create(name, bitmap, Scan0, stride, height_start, height_end, thHandler, values);
         * }
         */

        public abstract Manipulate create(ImageManipulatorType.Name name, Bitmap bitmap, System.IntPtr Scan0, int stride, int height_start, int height_end, ThreadHandler thHandler, int[] values);
        public void performTest1()
        {
            Bitmap bitmap = new Bitmap(100, 100);
            ImageManipulatorType.Name filter = ImageManipulatorType.Name.GRAYSCALE; // TODO: Passenden Wert initialisieren
            int threads = 2; // TODO: Passenden Wert initialisieren
            ThreadHandler thHandler = new ThreadHandler(threads);
            ImageManipulator t = new ImageManipulator(bitmap, filter, thHandler); // TODO: Passenden Wert initialisieren
            PrivateObject param0 = new PrivateObject(t); // TODO: Passenden Wert initialisieren
            ImageManipulator_Accessor target = new ImageManipulator_Accessor(param0);

            BitmapData bmData = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height),
               ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
            int stride = bmData.Stride;

            int bytes = Math.Abs(bmData.Stride) * bmData.Height;

            System.IntPtr Scan0 = bmData.Scan0;

            target.perform(Scan0, stride);

            // Die Funktion stößt nur andere Funktionen ab hier an. Was testen?

            bitmap.UnlockBits(bmData);
        }
        public void performTest()
        {
            Bitmap bitmap = new Bitmap(10, 10);
            ImageManipulatorType.Name filter = ImageManipulatorType.Name.GRAYSCALE; // TODO: Passenden Wert initialisieren
            int threads = 2; // TODO: Passenden Wert initialisieren
            ThreadHandler thHandler = new ThreadHandler(threads);
            ImageManipulator target = new ImageManipulator(bitmap, filter, thHandler); // TODO: Passenden Wert initialisieren

            bool expected = true; // TODO: Passenden Wert initialisieren
            bool actual = target.perform();

            Assert.AreEqual(expected, actual);
        }
Example #27
0
 public InvertFilter(Bitmap b, System.IntPtr Scan0, int stride, int height_start, int height_end, ThreadHandler thInfo)
     : base(b, Scan0, stride, height_start, height_end, thInfo)
 {
 }
        public override Manipulate create(ImageManipulatorType.Name name, Bitmap bitmap, System.IntPtr Scan0, int stride, int height_start, int height_end, ThreadHandler thHandler, int[] values)
        {
            switch (name)
            {
            case ImageManipulatorType.Name.INVERT:
                return(new InvertFilter(bitmap, Scan0, stride, height_start, height_end, thHandler, values));


            case ImageManipulatorType.Name.OSCILLATION:
                return(new OscillationFilter(bitmap, Scan0, stride, height_start, height_end, thHandler, values));


            case ImageManipulatorType.Name.GRAYSCALE:
                return(new GrayscaleFilter(bitmap, Scan0, stride, height_start, height_end, thHandler, values));

            case ImageManipulatorType.Name.BLACKWHITE:
                return(new BlackWhiteFilter(bitmap, Scan0, stride, height_start, height_end, thHandler, values));


            case ImageManipulatorType.Name.ERROR_DIFFUSION:
                return(new ErrorDiffusionFilter(bitmap, Scan0, stride, height_start, height_end, thHandler, values));


            case ImageManipulatorType.Name.SEPIA:
                return(new SepiaFilter(bitmap, Scan0, stride, height_start, height_end, thHandler, values));


            case ImageManipulatorType.Name.SAMPLE_BOARD:
                return(new SampleBoardFilter(bitmap, Scan0, stride, height_start, height_end, thHandler, values));


            case ImageManipulatorType.Name.RGB_RED:
                return(new RGB_ModeFilter(bitmap, Scan0, stride, height_start, height_end, thHandler, ImageManipulatorType.Name.RGB_RED));



            case ImageManipulatorType.Name.RGB_GREEN:
                return(new RGB_ModeFilter(bitmap, Scan0, stride, height_start, height_end, thHandler, ImageManipulatorType.Name.RGB_GREEN));


            case ImageManipulatorType.Name.RGB_BLUE:
                return(new RGB_ModeFilter(bitmap, Scan0, stride, height_start, height_end, thHandler, ImageManipulatorType.Name.RGB_BLUE));
            }

            throw (new FilterUndefinedException("Selected filter is not defined in FilterFactory class!"));
        }