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_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 try_save_PixelState(ImageObject imgObj) { // solange noch nicht alle Threads beendet wurden -> warten while (this.threadsAreAlive()) { // bg_filter_thread Thread.Sleep(2); } // PixelState Objekt besorgen PixelState state = PixelState.getInstance(); // ab hier Thread sicher speichern lock (_locker) { state.add(imgObj); } }