F
Fenixx
Gast
Hallo zusammen,
gib es eine Möglichkeit die Farben eines ganzen BufferedImages zu invertieren?
Dabei habe folgendes Szenario:
Ich habe ein kleines Malprogramm erstellt mit dem ich zeichnen kann und dieses Bild anschließend abspeichere. Wenn ich nun das Bild als PNG abspeichere, wird meine erstellte Grafik "richtig" abgespeichert. Alle Farben entsprechen der Zeichnung.
Der Fehler: Wenn das Bild als JPG abgespeichert wird, so werden die Farben invertiert. Wenn also schwarz gezeichnet wird, wird dies als weiß abgespeichert.
Deswegen müsste ich das ganze Bild vor der JPG-Abspeicherung farblich invertieren.
Mein Code (nur die wichtigsten Stellen): Hauptprogramm
Erstellung des BufferedImages in dem Malpanel:
Ich wäre über jede Hilfe sehr dankbar.
gib es eine Möglichkeit die Farben eines ganzen BufferedImages zu invertieren?
Dabei habe folgendes Szenario:
Ich habe ein kleines Malprogramm erstellt mit dem ich zeichnen kann und dieses Bild anschließend abspeichere. Wenn ich nun das Bild als PNG abspeichere, wird meine erstellte Grafik "richtig" abgespeichert. Alle Farben entsprechen der Zeichnung.
Der Fehler: Wenn das Bild als JPG abgespeichert wird, so werden die Farben invertiert. Wenn also schwarz gezeichnet wird, wird dies als weiß abgespeichert.
Deswegen müsste ich das ganze Bild vor der JPG-Abspeicherung farblich invertieren.
Mein Code (nur die wichtigsten Stellen): Hauptprogramm
Code:
dateiSpeichern.setActionCommand("Datei speichern");
dateiSpeichern.setText("Datei speichern");
dateiSpeichern.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
//Setzen der Filter
chooser.addChoosableFileFilter(jpgfilter);
chooser.addChoosableFileFilter(pngfilter);
//Öffnen des SaveDialogs
int state = chooser.showSaveDialog(null);
if (state == chooser.APPROVE_OPTION)
{
if (chooser.getFileFilter() instanceof JPGFilter)
{
dateiendung = jpgfilter.getDescription();
}
if (chooser.getFileFilter() instanceof PNGFilter)
{
dateiendung = pngfilter.getDescription();
}
//RenderedImage erzeugen
RenderedImage readImage = malPanel.getBufferedImage();
//Zwischenspeichern des Pfades
pfad = chooser.getSelectedFile() + dateiendung;
//Erzeugen einer neuen Datei
File file = new File(pfad);
//Schreiben der Datei
try
{
ImageIO.write(readImage, dateiendung.substring(1) , file);
}
catch(IOException ex)
{
ex.printStackTrace();
}
}
Erstellung des BufferedImages in dem Malpanel:
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);
this.addMouseListener(this);
this.addMouseMotionListener(this);
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
g2.drawImage(bi, null, 0, 0);
}
Ich wäre über jede Hilfe sehr dankbar.