SetRGB() wirkt bei Blue nicht

Seppel

Bekanntes Mitglied
Hallo ich habe folgenden Code:

Java:
Color FARBE[]={Color.red,Color.blue,Color.green,Color.yellow};


public void konvertImage(BufferedImage BildSpeicher,int f){		
		Color Farbe=FARBE[f];
		for(int x = 1; x<BildSpeicher.getWidth(this); x++){
            for (int y = 1; y < BildSpeicher.getHeight(this); y++) {   
                if(BildSpeicher.getRGB(x,y)==Color.BLACK.getRGB()){                 	
                    BildSpeicher.setRGB(x,y,Farbe.getRGB());
                }   
            } 
        }
}

Alle schwarzen Pixel sollen in eine andere Farbe umgewandel werden. Das original Bild ist ein gif und hat ein große durchsichtige Fläche und wenig Schwarz, Rot, Orange und Braun.

Setzen des Alphawertes verändert nichts, dieser ist ursprünglich bei 255.

Das Umwandeln funktioniert bei Rot ganz gut, leider k0ommt auch oft Orange (ähnlich) heraus.
Bei Blau ist keine Änderung sichtbar.

Habe bisher viel ausprobiert, alpha wert setzen wirkt sich korrekt aus. RGB ist Glücksfall.

Kann mir jemand helfen? Kann doch nicht so schwer sein.
 

Foxei

Bekanntes Mitglied
Hallo diese Funktion setzt alle nicht weißen Pixel zu dunkel Grau du musst noch noch die werte anpassen.
Java:
public void transformColor(BufferedImage img) throws IOException{
		int width=img.getWidth();
		int height=img.getHeight();
		
		for(int y=0;y<height;y++){
			for(int x=0;x<width;x++){
				int rgb=img.getRGB(x, y);
				int alpha = (rgb >> 24) & 0xFF;
	            int r = (rgb >> 16) & 0xFF;
	            int g = (rgb >> 8) & 0xFF;
	            int b = (rgb) & 0xFF;
	            
	            if(r!=255&&g!=255&&b!=255){
	            	r=30;b=30;g=30;
	            	img.setRGB(x, y, (int)(alpha<<24|r<<16|g<<8|b));
	            }
	            
			}
		}
 

Seppel

Bekanntes Mitglied
Hatte ich auch schon probiert geht aber auch nicht:

Java:
	public void transformColor(BufferedImage img) throws IOException{
		int width=img.getWidth();
		int height=img.getHeight();
		
		for(int y=0;y<height;y++){
			for(int x=0;x<width;x++){
				int rgb=img.getRGB(x, y);
				int alpha = (rgb >> 24) & 0xFF;
	            int r = (rgb >> 16) & 0xFF;
	            int g = (rgb >> 8) & 0xFF;
	            int b = (rgb) & 0xFF;
	            
	           if(r==0 && g==0 && b==0){
	            	r=255;b=0;g=0;
	            	img.setRGB(x, y, (int)(alpha<<24|r<<16|g<<8|b));
	            }
	            
			}
		}
	}

anbei 4 bilder, zwei original und zwei in "rot", wobei eines nicht den wert 255 bei rot hat.

1_1.Gif - directupload.net
22.gif - directupload.net
22_1.Gif - directupload.net
1.gif - directupload.net

zugegeben schwarz sieht man schlecht.

Bei Blau kommt es zu keiner änderung, Grün genauso wenig

Ich habe also bei einer Figur mal testweise am Fuss je ein Pixel Rot, Blau und Grün (je 255 und Rest 0) angepasst. Jetzt funktioniert die Konvertierung. Hoffe aber nicht darauf das das die Lösung ist.
 

Foxei

Bekanntes Mitglied
Wenn du mir genau sagen kannst wie sich die Figur verändern soll kann ich meinen Code anpassen :)
Gruß Simon

p.s hol dir die Original aus dem Seiten Quelltext.
o9atuoge.gif
x7or6lb8.gif
5yulmsgq.gif
tn92xodd.gif
 
Zuletzt bearbeitet:

Seppel

Bekanntes Mitglied
Alle Figuren die ich habe haben einen schwarzen Körper oder schwarze Flächen. Diese sollen in Rot, Blau und später auch in Grün und Gelb umgewandelt werden. Da ich 20*55 Bilder im Moment habe kann ich halt nicht bei jedem ein 255Rot/Blau/Grün/Gelb Pixel einbauen.

Bei den Hochgeladenen Figuren hat sich somit die Richtige Fläche verändert. Aber das Rot sollte einheitlich sein.
 

Foxei

Bekanntes Mitglied
Hallo Seppel,
der Sorry hab dich ganz vergessen. Also dein Fehler ist ganz simpel diene Bilddateien sind alle Falsch. Deine Bilder sind im Farbraum "Indizierte Farbe" was auch immer das für einer sein soll? o_O Wenn du deine Bilder in den Farbraum RGB änderst ist alles so wie es soll.

Zum testen kannst du hier ein Bild + Farbe angeben und er zeigt dir das Resultat.


Gruß Simon

Bild.java
Java:
import java.awt.Color;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;


public class Bild {
	public static void main(String[] args){
		try {
			showInFrame(transformColor(ImageIO.read(new File("man2.png")),new Color(255,0,0)));
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	private static void showInFrame(BufferedImage img) {
		JFrame frame=new JFrame();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.add(new JLabel(new ImageIcon(img.getScaledInstance(200, 200,BufferedImage.SCALE_AREA_AVERAGING))));
		frame.pack();
		frame.setLocationRelativeTo(null);
		frame.setVisible(true);
	}
	public static BufferedImage transformColor(BufferedImage img,Color color) throws IOException{
		int width=img.getWidth();
		int height=img.getHeight();
		
		for(int y=0;y<height;y++){
			for(int x=0;x<width;x++){
				int rgb=img.getRGB(x, y);
				int alpha = (rgb >> 24) & 0xFF;
	            int r = (rgb >> 16) & 0xFF;
	            int g = (rgb >> 8) & 0xFF;
	            int b = (rgb) & 0xFF;
	            
	           
	            
	            if(r==0&&g==0&&b==0&&alpha>0){
	            	System.out.println("Is: "+r+", "+g+", "+b+", "+alpha);
	            	r=color.getRed();b=color.getBlue();g=color.getGreen();
	            	
	            	System.out.println("Set: "+r+", "+g+", "+b+", "+alpha);
	            	
	            	img.setRGB(x, y, new Color(r, g, b, alpha).getRGB());
	            	
	            	rgb=img.getRGB(x, y);
					alpha = (rgb >> 24) & 0xFF;
		            r = (rgb >> 16) & 0xFF;
		            g = (rgb >> 8) & 0xFF;
		            b = (rgb) & 0xFF;
		            
		            System.out.println("Is Now: "+r+", "+g+", "+b+", "+alpha);
	            }
	            
			}
		}
		return img;
	}
}
 

Ähnliche Java Themen

Neue Themen


Oben