Farbe invertieren?

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo,

ich habe Objekte die gezeichnet werden und selber ihre Farbe kennen, nachdem zum Bsp ein Kreis gezeichnet wurde möchte ich in dessen Mitte etwas schreiben. Dazu soll die Farbe invertiert werden.

Aber wie kann ich das ganz simpel machen?

Die Farbe der Objekte speichere ich in der Form color=Color.WHITE;

Fr(D)ank
 
B

Beni

Gast
Sowas sollte gehen:
Code:
Color color = ...
color = new Color( 255 - color.getRed(), 255 - color.getGreen(), 255 - color.getBlue() );
 
G

Guest

Gast
Angenommen ich habe folgende Klasse:

Code:
import java.awt.Color;
import java.awt.image.BufferedImage;

public class InvertImage
{

  public BufferedImage transformImage(BufferedImage src)
  {
   int width = src.getWidth();
   int height = src.getHeight();
   BufferedImage dest = new BufferedImage(width, height, src.getType());
   for (int x = 0 ; x < width ; ++x)
   {
     for (int y = 0 ; y < height ; ++y)
     {
       int rgbValue = src.getRGB(x, y);
       Color color = new Color(rgbValue);
       int red = 255 - color.getRed();
       int green = 255 - color.getGreen();
       int blue = 255 - color.getBlue();
       color = new Color (red, green, blue);
       dest.setRGB(x,y,color.getRGB());
     }
   }
   return dest;
  }
}

Folgendes BufferedImage übergebe ich der Klasse:

Code:
BufferedImage bi; 
  Graphics2D big2;
  
  Graphics g;
  
  public Zeichenpanel ()
  {
    bi = new BufferedImage( 1250, 1074, BufferedImage.TYPE_INT_ARGB );
    big2 = bi.createGraphics();
    big2.setColor(Color.BLACK);
  }
Es wird also auf dem BufferedImage zuerst gespeichert und anschließend als JPG (invertiert durch die Klasse InvertImage) abgespeichert.

Der Klasse InvertImage übergebe ich also das BufferedImage, auf dem vorher gezeichnet wurde.
An Pixel (0,0) ist die Farbe weiß (durch Debuggen getestet).
Folglich haben alle int-Variablen red, green, blue jeweils den Wert 255.
Dadurch erstelle ich mir eine neue Farbe:
color = new Color(255, 255, 255);
Als "Farbwert" von color.getRGB erhalte ich -1. Dadurch kann das "neue" BufferedImage kein richtigen Farbwert erhalten. Selbst wenn ich das BufferedImage vorher im Malprogramm "bemalt" habe, ist mir nach der Speicherung das Bild in einem kompletten Rot-Ton.
 
G

Guest

Gast
Code:
import java.awt.Color; 
import java.awt.image.BufferedImage; 

public class InvertImage 
{ 

  public BufferedImage transformImage(BufferedImage src) 
  { 
   int width = src.getWidth(); 
   int height = src.getHeight(); 
   BufferedImage dest = new BufferedImage(width, height, src.getType()); 
   for (int x = 0 ; x < width ; x++) 
   { 
     for (int y = 0 ; y < height ; y++) 
     { 
       int rgbValue = src.getRGB(x, y); 
       Color color = new Color(rgbValue); 
       int red = 255 - color.getRed(); 
       int green = 255 - color.getGreen(); 
       int blue = 255 - color.getBlue(); 
       color = new Color (red, green, blue); 
       dest.setRGB(x,y,color.getRGB()); 
     } 
   } 
   return dest; 
  } 
}
Hab ich so befolgt. Leider noch genau der gleiche Fehler.
 
G

Guest

Gast
Da ich übrigens die Invertierung für die Speicherung von PNGs nicht verwende, da dies für dieses Format nicht relevant ist, funktioniert die Abspeicherung fehlerfrei. Das BufferedImage muss also korrekt sein.
 

Der Müde Joe

Top Contributor
funkt wunderbar

Code:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;

import javax.imageio.ImageIO;
import javax.swing.JFrame;

public class Test {
	public BufferedImage image;
	
	
	public Test(){
		image= openImage("test.jpeg"); 
		seperateColor();
	}
	
	
	public synchronized BufferedImage openImage(String fileName){
		
		try{
			FileInputStream fis = new FileInputStream(new File(fileName));
			InputStream is = new BufferedInputStream(fis);
			BufferedImage newImage = ImageIO.read(is);
		
			is.close();			
			return newImage;
	
		}
		catch(Exception e){
			e.printStackTrace();
		}
		return null;
	}
	
    public Color getColor(int i, int j) {
        return new Color(image.getRGB(i, j));
    }	
	/*seperate the Color Channels
	 *
	 */
	public void seperateColor(){
		
		int imageWidth = image.getWidth();
		int imageHeight = image.getHeight();
		
		BufferedImage changedImage = new BufferedImage(imageWidth,imageHeight,BufferedImage.TYPE_INT_ARGB);
		Color color;
		
		for (int x = 0; x < imageWidth; x++) {
           for (int y = 0; y < imageHeight; y++) {
               
               color = getColor(x, y);
               
               int r = 255- color.getRed();
               int g = 255-color.getGreen();
               int b = 255-color.getBlue();
               
               changedImage.setRGB(x, y,   (new Color(r, g, b)).getRGB());

           }
       }      
       new FrameRGB(changedImage, "aaaRED.jpg");
	}
	
	public static void main(String[] args){
		new Test();
	}
	
	
	class FrameRGB extends JFrame{
		
		public BufferedImage imageBuffer;
		public String name;
		
		public FrameRGB(BufferedImage image, String name){
	        setTitle("ColorSeperation"); 			
	 
	        
	 
	        int imageWidth  = image.getWidth(); 
	        int imageHeight = image.getHeight(); 
	 
	        imageBuffer = new BufferedImage(imageWidth, imageHeight, BufferedImage.TYPE_INT_ARGB); 
	 		imageBuffer.getGraphics().drawImage(image, 0, 0, null); 
	        
	  
	 		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	        setSize(imageWidth, imageHeight); 
	        setResizable(false); 
	        setVisible(true); 
	        
	        this.name=name;        
	        
//			saveImage();
		}
		
		
		public void paint(Graphics g){
			 g.drawImage(imageBuffer, 0, 0, this);
			 
		}	
	}

}

alter...sehr alter code von mir leicht modifiziert
 
F

Fenixx

Gast
Deine Version funktioniert so leider nicht bei mir. Ich habe die Sache jetzt aber anders gelöst.

Code:
public static BufferedImage invertImage (BufferedImage image)
  {
    
    int width = image.getWidth();
    int height = image.getHeight();
    BufferedImage changedImage = new BufferedImage(width,height,BufferedImage.TYPE_INT_ARGB);
    for (int x = 0 ; x < width ; ++x)
    {
      for (int y = 0 ; y < height ; ++y)
      {
        //Wert holen
        int argb = image.getRGB(x,y);
        //Decodieren
        int red = (argb >> 16) & 0xff;
        int green = (argb >> 8) & 0xff;
        int blue = argb & 0xff;
        int alpha = (argb >> 24) & 0xff;
        
        //Manipulation: Wertumkehrung
        //Muss Wert zwischen 0 und 255 sein
        red = 255 - red;
        green = 255 - green;
        blue = 255 - blue;
        //Transparenzwert
        alpha = 255 - alpha;
        
        //Codierung
        argb = (alpha << 24) | (red << 16) | (green << 8) | blue;
        //Setzen der Farbe
        changedImage.setRGB(x,y,argb);
      }
    }
    return changedImage;
  }

Wenn der User jetzt beispielsweise etwas schwarz zeichnet, erhalte wird dies in JPG tatsächlich schwarz dargestellt. Allerdings tauchen hierbei Probleme mit der Transparenz auf. Der "weiße" Hintergrund wird rötlich dargestellt.
Meine Frage: Wie muss ich die Transparenz invertieren? Manipuliere ich diese nicht, so findet keine richtige Invertierung statt.
 

Illuminu

Mitglied
möchte mal behaupten er will seinen "weiß-transparenten"-HG auch weiterhin weiß/transparent behalten. oder schwarztransparent, wobei alle anderen farben invertiert werden sollen.
 

Marco13

Top Contributor
Mal ganz pragmatisch: Man könnte auch einfach den RGB-Wert invertieren. Darum ging es doch, oder?
int rgbInv = ~rgb;
Naja. Geht auch mit 255-r ....
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Farbe des Striches eines TitledBorders ändern Java Basics - Anfänger-Themen 2
Jambolo Karten sortieren nach Rang und Farbe Java Basics - Anfänger-Themen 5
amelie123456 Objekt Farbe Quellcode Java Basics - Anfänger-Themen 4
D Ampel Programmieren die jede 10 sekunden ihre farbe wechselt Java Basics - Anfänger-Themen 6
Tom/S JLabel Icon Farbe Java Basics - Anfänger-Themen 2
C Farbe in der Auswahlliste (Direkte Reaktion auf Änderung) Java Basics - Anfänger-Themen 3
M Mit KeyListener Farbe von Label ändern Java Basics - Anfänger-Themen 13
B Eclipse Tabellen Farbe ändern? Java Basics - Anfänger-Themen 2
J Probleme bei der Umwandlung einer Farbe von Hex zu RGB Java Basics - Anfänger-Themen 8
E Mastermind programmieren, wie den falschen Platz aber richtige Farbe schecken? Java Basics - Anfänger-Themen 23
W JLabel, Farbe durch Listener ändern Java Basics - Anfänger-Themen 6
D Mit Buttonklick Farbe der anderen Buttons verändern? Java Basics - Anfänger-Themen 2
D JButton soll Farbe von JTextfield ändern Java Basics - Anfänger-Themen 5
S Schriftart/Farbe im Grafikfenster ändern Java Basics - Anfänger-Themen 8
I Zähler, der erst wieder zählt nachdem Pixel wieder andere Farbe hat Java Basics - Anfänger-Themen 2
U Farbe meines Würfels jede sekunde ändern! Java Basics - Anfänger-Themen 5
X Bildabschnitt anhand der Farbe und messen Java Basics - Anfänger-Themen 4
S Farbe eine Zeile in JTable ändern, wenn JButton geklickt wurd Java Basics - Anfänger-Themen 4
A Dateiformat mit 100%iger Farbe Java Basics - Anfänger-Themen 6
M Punkt auf eine Farbe prüfen Java Basics - Anfänger-Themen 8
B Methode zum ändern der Farbe? Java Basics - Anfänger-Themen 20
J Bild mit transparenter Farbe Java Basics - Anfänger-Themen 10
T JLabel Farbe ändern, Problem Java Basics - Anfänger-Themen 2
R JTabbedPane - Farbe ändern Java Basics - Anfänger-Themen 4
L Farbe unter Cursor bestimmen Java Basics - Anfänger-Themen 5
B Farbe wählen ohne JColorChooser Java Basics - Anfänger-Themen 13
B JTextArea Farbe und Schrift aendern Java Basics - Anfänger-Themen 2
I Schriftart / farbe / größe bei Emailversand ändern Java Basics - Anfänger-Themen 17
K Farbe heller machen Java Basics - Anfänger-Themen 4
H Farbe setzen Java Basics - Anfänger-Themen 5
D Text Farbe Java Basics - Anfänger-Themen 7
T Ausgabe in Farbe Java Basics - Anfänger-Themen 5
T Die deutsche Flagge :) . Farbe ausgeben Java Basics - Anfänger-Themen 4
G jTable schriftgröße und -farbe ändern? Java Basics - Anfänger-Themen 2
A Im Chat eigenen Beitrag in Farbe zeigen Java Basics - Anfänger-Themen 8
K jTextPane: Farbe des markierten Textes ändern und auslesen? Java Basics - Anfänger-Themen 3
S Zufällige Farbe Java Basics - Anfänger-Themen 5
M Text in der Farbe rot ausgeben Java Basics - Anfänger-Themen 9
L Dreieck soll Farbe ändern Java Basics - Anfänger-Themen 4
S Drucken in farbe Java Basics - Anfänger-Themen 4
D Die Farbe wird nicht angenommen Java Basics - Anfänger-Themen 2
P String eine rote Farbe geben? Java Basics - Anfänger-Themen 6
S Cursor Form und oder Farbe verändern, geht das???? Java Basics - Anfänger-Themen 4
K Übergabe der Variable für Farbe Java Basics - Anfänger-Themen 6
D SWING Anwendung mit 3 Buttons zum ändern der Farbe Java Basics - Anfänger-Themen 18
G Farbe des Pixels unter dem Mauszeiger? Java Basics - Anfänger-Themen 40
O Ein Sichtbarer Rahmen (in Farbe) um ein JPanel. Java Basics - Anfänger-Themen 5
F String in Farbe ausgeben Java Basics - Anfänger-Themen 2
D Farbe vom Scrollbalken ändern Java Basics - Anfänger-Themen 6
M Farbe der Titelleiste eines JFrames ändern Java Basics - Anfänger-Themen 6
Bierhumpen Farbe? Java Basics - Anfänger-Themen 4
C Farbe ins Spiel bringen Java Basics - Anfänger-Themen 2
C JTable: Farbe und Checkbox Java Basics - Anfänger-Themen 3
M Bei Swing Komponenten die Farbe ändern? Java Basics - Anfänger-Themen 12
P Button "Farbe wechseln" Java Basics - Anfänger-Themen 11
C Farbe in DOS Java Basics - Anfänger-Themen 2
F Ball soll auf Mausklick farbe ändern. Java Basics - Anfänger-Themen 10
C Farbe von ProgressBar ändern Java Basics - Anfänger-Themen 3
L Methode zum invertieren eines Arrays Java Basics - Anfänger-Themen 7
H Knoten-Reihenfolge einer LinkedList invertieren Java Basics - Anfänger-Themen 11
G Stack invertieren Java Basics - Anfänger-Themen 3
G verkettete Liste - invertieren Java Basics - Anfänger-Themen 2
Z mehrdimensionales Array, Matrix "invertieren" Java Basics - Anfänger-Themen 4
P Farben Invertieren per BufferedImageOp Java Basics - Anfänger-Themen 4
F Farben eines ganzen BufferedImage invertieren Java Basics - Anfänger-Themen 2
G Im Zeichenarray Leerzeichen invertieren Java Basics - Anfänger-Themen 5
S Stack invertieren Java Basics - Anfänger-Themen 14

Ähnliche Java Themen

Neue Themen


Oben