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 ImageManipulator(Bitmap bitmap, ImageManipulatorType.Name filter, ThreadHandler thHandler, int[] values = null )
 {
     this.bitmap = bitmap;
     this.filter = filter;
     this.thHandler = thHandler;
     this.values = values;
 }
        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 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 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;
 }
예제 #7
0
 public ImageObject(Image img, ImageManipulatorType.Name manipulator)
 {
     // TODO: Complete member initialization
     this.img = img;
     this.manipulator = manipulator;
 }