farbschleier über bild legen?

Status
Nicht offen für weitere Antworten.
G

grayson

Gast
hallo, ich suche nach einer einfachen möglichkeit ein bild mit einem farbschleier zu belegen bzw in einem bestimmten farbton einzufärben.
 

hugo

Bekanntes Mitglied
Bin nicht gerade in der Bildbearbeitung zu Hause, aber wenn du von jedem Pixel die Farbwerte ausliest, kannst du ja zum Beispiel die Rot-Komponente immer auf 200 setzen und dann hast du einen rötlichen Farbschleier. Ist zwar nicht gerade sehr effektiv, aber ein Anfang.
 
G

grayson

Gast
hmm ok, also aus nem bild nen array machen, wo die pixel drin sind also int[h*w] mit pixelgrabber --->funzt

aber wie komm ich vom array dazu wieder nen bild zu bekommen -->und zwar mit entsprechend hoch gesetzten werten für sagen wir mal rot?
 
B

Beni

Gast
Du könntest auch einen "java.awt.image.RGBImageFilter" implementieren (da muss man nur eine einzige Methode überschreiben).

Dann benötigst du noch eine Methode, welche deinen Filter benutzt:
Code:
public static Image createImage (Image i) {
	MyFilter filter = new MyFilter(); // das ist dein Filter
	ImageProducer prod = new FilteredImageSource(i.getSource(), filter);
	Image image = Toolkit.getDefaultToolkit().createImage(prod);
	return image;
    }
 
G

grayson

Gast
wurgs.... bildbearbeitung ist ja ein sowas von rotes tuch für mich.... hier nochmal ne genauere problembeschreibung erstmal... ::


in meinem spielchen hab ich 5 verschiedene parteien, jede mit einer entsprechenden fraktionsfarbe. als da wären :


blau, rot, gelb, lila, grün


die spielsteine die ich verwenden will, sollen allerdnings nicht in diesen farben vorliegen (das werden tausende von dateien wenn ich alle spielsteine die eine partei haben kann auch noch in 5 verschiedenen farben halten muss) ---jaja tausende ist übertrieben :D ---


daher hab ich mir überlegt, das ich beim laden der bilder eine methode brauch, der ich das geladene bild (awt.Image) und die fraktionskennung (String ) übergebe und eins zwei schwup, kommt als rückgabe mein bild raus, allerdings überzogen mit der fraktionsfarbe.



dummer weise bin ich eine absolute null wenn es darum geht etwas anderes mit bildern zu machen als zu skalieren oder von farbe in graustufen zu konvertieren (auch dazu hab ich ewig gebraucht ;) )

kann mir da jemand nen kleines beispiel geben ?




danke
 
G

grayson

Gast
also ich hab bis jetzt das hier :

Code:
public void transformColor(Image img){
     BufferedImage bi = (BufferedImage)img;
   int height=bi.getHeight();
   int width = bi.getWidth();
   int[] colors= new int[height*width];
   DirectColorModel colorModel = (DirectColorModel) ColorModel.getRGBdefault(); 
   for(int i=0;i<height;i++){
   
       for(int a=0;a<width;a++){
          int currentRGB= bi.getRGB(i,a);
    int red=    colorModel.getRed(currentRGB);
    int blue=    colorModel.getBlue(currentRGB);
    int green=    colorModel.getGreen(currentRGB);
   
//... hier muss ich dann noch die gewünschten werte auf 200 setzen 
//... und danach natürlich den neuen wert zusammen stellen und mit bi.setRGB(i,a,neuerWert); einfügen
//... k.a. wie das gehn soll ;)
       }
       
   }
   
 }

soo, die methode BufferedImage.setRGB(int x,int y, int rgb)will ich verwenden.
wie bekomm ich aus den int's red, blue, green wieder nen int rgb?
 
G

grayson

Gast
soo nach ein wenig basteln nun dies :
Code:
  public Image transformColor(Image img, String faction) {
        BufferedImage bi = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_RGB);
        bi.createGraphics().drawImage(img, 0, 0, null);
        int height = bi.getHeight();
        int width = bi.getWidth();
        int[] colors = new int[height * width];
        PixelGrabber grabber = new PixelGrabber(img, 0, 0, img.getWidth(null), img.getHeight(null), colors, 0, img.getWidth(null));
        try {
            grabber.grabPixels();
        } catch (Exception e) {
            e.printStackTrace();
        }
        for (int i = 0; i < colors.length; i++) {
            System.err.println("ArrayIndex: " + i);
            DirectColorModel colorModel = (DirectColorModel) ColorModel.getRGBdefault();
            int red = colorModel.getRed(colors[i]);
            int blue = colorModel.getBlue(colors[i]);
            int green = colorModel.getGreen(colors[i]);
            if (faction.trim().equals("marik")) {
                red = 200;
                blue = 200;
            } else if (faction.trim().equals("steiner")) {
                blue = 200;
            } else if (faction.trim().equals("kurita")) {
                red = 200;
            } else if (faction.trim().equals("liao")) {
                green = 200;
            } else if (faction.trim().equals("davion")) {
                red = 200;
                green = 200;
            }

            Color result = new Color(red, green, blue);
            colors[i] = result.getRGB();
            bi.setRGB(0, 0, width, height, colors, 0, width * height */was dieser parameter bedeuten soll.... k.a.
laut javadoc steht da "@param scansize the scanline stride" ----> was is los? /*);

        }

	
        return bi;
    }


blöder weise bekomm ich immer eine Exception :


java.lang.ArrayIndexOutOfBoundsException: 3200
at java.awt.image.BufferedImage.setRGB(BufferedImage.java:919)
at util.ImageLoader.transformColor(ImageLoader.java:149)
at util.ImageLoader.loadUnitMapImage(ImageLoader.java:55)
at client.DeployDialog$ComboBoxRenderer.getListCellRendererComponent(DeployDialog.java:159) //in der zeile steht:

bi.setRGB(0, 0, width, height, colors, 0, width * height);
 

Sky

Top Contributor
So kannst Du das Bild ändern, im gezeigtem Fall wird ein Blau-Schimmer angezeigt:

Code:
bi = ImageIO.read( new File( FILENAME) );
for ( int i = 0; i < bi.getWidth(); i++ ) {
  for ( int j = 0; j < bi.getHeight(); j++ ) {
    int rgb = bi.getRGB(i, j);
    Color c = new Color(rgb);
    int newRGB = new Color( c.getRed(), c.getGreen(), 200 ).getRGB();
    bi.setRGB(i, j, newRGB);
  }
}
 
G

grayson

Gast
ok, ok danke für die tipps, es geht jetzt in die richtug die ich mir vorstelle, bis auf eines :

da mein spielsteinbild ja ein rechteck ist, hab ich png bilder genommen, wegen der transparenz um den spielstein ringsrum ---> sonst sieht man ja das spielfeld nimma.

nun habe ich mir meiner methode natürlich den effekt, das mein ganzes bild also das ganze rechteck ein gleichfarbiges quadrat wird.

welchen farb / alphawert hat den ein transparenter pixel ?

bzw wie muss ich die abstimmung der farben machen, damit mein spielstein kein einfarbiger umriss wird sondern der schimmer je nach vorheriger farbe gelegt wird?
 
G

grayson

Gast
hey sky, danke für deinen tipp, damit geht es, bis auf einen hässlichen schwarzen rand (die bereiche die transparent sein sollen.....) hast noch ne ahnung wie ich das auch noch hin bekomm?
 

Sky

Top Contributor
grayson hat gesagt.:
hey sky, danke für deinen tipp, damit geht es, bis auf einen hässlichen schwarzen rand (die bereiche die transparent sein sollen.....) hast noch ne ahnung wie ich das auch noch hin bekomm?

Transparente Stellen werden bei mir irgendwie nur weiss angezeigt... aber vielleicht mache auch ich das was falsch!?
 
G

grayson

Gast
naja, soweit ich das verstanden habe wird ein bild meist mit einer transparenten farbe schwarz oder weiss und dem alphawert 0 oder 100 dazu abgespeichert und diese werte als "transparent" bestimmt
daher kann es schon sein, das du bilder mit weissem rand hast und ich mit schwarz ;)

das problem ist vielmehr: wie bekommt man den weg? ich hab jetzt schon versucht mit wilden If abfragen die transparenten pixel raus zu filtern, aber das beste was ich hin bekommen hab, war das der schwarze rand sich mit eingefärbt hat.......


vieleicht hat ja da noch wer ne idee?!?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
kodela Datenübergabe über Buttons Allgemeine Java-Themen 8
W Jar-File Start nur über Terminal Allgemeine Java-Themen 13
A ByteArray über Socket Allgemeine Java-Themen 3
berserkerdq2 Text über einen Shape anzeigen (Scenebuilder) Allgemeine Java-Themen 1
I 2D-Grafik Vektor-Grafik über die Zwischenablage nach Adobe Illustrator transferieren Allgemeine Java-Themen 8
TheSkyRider Methode über DataInputStream "auslösen" Allgemeine Java-Themen 6
I OpenPDF erzeugt riesige PDFs, wenn Grafiken über PdfGraphics2D#drawImage gezeichnet werden Allgemeine Java-Themen 1
T Etikettendrucker über TCP-IP Allgemeine Java-Themen 1
Encera Gleichzeitiges Ausführen und verbinden von 2 Java-Klassen über die Eingabeaufforderung und Eclipse Allgemeine Java-Themen 21
B HTTP Allgemeine Fragen über Suchmaschine nutzen mit Java Allgemeine Java-Themen 20
torresbig Klasse mit extends Calendar über Methoden ändern (Hirnblockade) Allgemeine Java-Themen 7
B Liste ändern während Iteration über Diese? Allgemeine Java-Themen 16
Master3000 Java Konsole über Buffered Reader Zeilenweise auslesen ? Allgemeine Java-Themen 26
J Daten über serielle Schnittstelle empfangen Allgemeine Java-Themen 4
L Aufwandsabschätzung: Android-App Aufnahmefunktion (foto) und zweiter Ebene über dem Foto (teiltransparent) Allgemeine Java-Themen 6
M Registry Autostart Eintrag mit Java erstellen (über Windows cmd) Allgemeine Java-Themen 7
OSchriever Programm über Linux-Kommandozeile ausführen Allgemeine Java-Themen 20
J Namen von Methoden über Reguläre Ausdrücke bearbeiten Allgemeine Java-Themen 6
M Schnelleres Speichern von XML-Daten über URLConnection Allgemeine Java-Themen 4
M Keine weitere Eingabe in der Main möglich. Eventueller Ansatz über while. Allgemeine Java-Themen 8
Drachenbauer Wie kann eine vorgegebene Farbe über einen String erkannt werden? Allgemeine Java-Themen 11
W Variablenübergabe über mehrere Klassen Allgemeine Java-Themen 4
N Über einen Button in JavaFX ein Event über eine Pipeline schicken(Netty) Allgemeine Java-Themen 1
M Threads über Kommandozeile Allgemeine Java-Themen 5
david19 Software AE über Domain laufen lassen Allgemeine Java-Themen 0
Q Selbständig ActionEvent auslösen zum Daten senden über serielle Schnittstelle Allgemeine Java-Themen 7
T Problem mit externen Datenbankzugriff über SSH Tunnel Allgemeine Java-Themen 4
K Auf Dateiverzeichnis extern zugreifen (evtl über XML??) Allgemeine Java-Themen 22
C VisualVM oder Jconsole über Jolokia-Proxy Allgemeine Java-Themen 0
G USB-Pins über Java ansteuern Allgemeine Java-Themen 8
Ernesto95 Best Practice Localization über ResourceBundle Allgemeine Java-Themen 6
C Classpath Neue Klasse über einen Button ausführen Allgemeine Java-Themen 3
C Auslesen auslösen über Button-Click Allgemeine Java-Themen 8
M Fragen beantworten über Textfeldeingabe Allgemeine Java-Themen 5
AssELAss Best Practice Checksumme über jede Spalte zweier Tabellen und vergleichen Allgemeine Java-Themen 3
T Strings über Bluetooth zwischen PC,µc oder Samrtphone senden und empfangen Allgemeine Java-Themen 0
F Try/catch über ganze Klasse Allgemeine Java-Themen 9
kodela Eigenartige Datumsberechnung über GregorianCalendar Allgemeine Java-Themen 15
HarleyDavidson Best Practice Integer-Zahlenfolge über mehrere Programmstarts Allgemeine Java-Themen 7
T .jar über cmd ausführen (später dann batch) Allgemeine Java-Themen 6
F In OSX: Java-Programm über URI-Scheme aufrufen mit Parameter? Allgemeine Java-Themen 0
C Input/Output Zip Files über Socket senden und empfangen Allgemeine Java-Themen 6
M WebService - Zugriff auf Webservice Methode über Browser Allgemeine Java-Themen 1
C .jar File lässt sich nur über Konsole öffnen Allgemeine Java-Themen 1
L Videodateien über Java öffnen unabhängig vom Format Allgemeine Java-Themen 4
Thallius Hash über serialisiertes Objekt? Allgemeine Java-Themen 3
A Threads Lock über mehrere Abschnitte in verschiedenen Methoden Allgemeine Java-Themen 5
T Daten über port abfangen mit proxy server Allgemeine Java-Themen 12
M Eingabe von Arrays geht über gewünschte Anzahl hinaus Allgemeine Java-Themen 2
L Prüfen, ob Programm über 32bit oder 64bit Java ausgeführt wird Allgemeine Java-Themen 4
F Content-Disposition ermitteln über URL Allgemeine Java-Themen 2
ARadauer Checksumme über BigDecimal Werte Allgemeine Java-Themen 11
A Class Datei aus Verzeichnis über URLClassLoader laden Allgemeine Java-Themen 2
G Darstellung von Ergebnissen einer Dokumentensuche über eine JTable Allgemeine Java-Themen 19
S VLC + Lied über Java starten Allgemeine Java-Themen 17
M HTML-Code von Webseite über Browser oder Console auslesen?? Allgemeine Java-Themen 5
A Sinuston ausgeben und über Mikro Amplitude messen – machbar? Allgemeine Java-Themen 6
R Java-Progamm über Icon starten unter Windows Allgemeine Java-Themen 9
C Daten über URL an PHP verschicken Allgemeine Java-Themen 4
O Fragen über Fragen - Bei Änderung XML-Datei -> Anpassung GUI Allgemeine Java-Themen 7
aze Jar ausführen über Runtime.execute funktioniert nicht Allgemeine Java-Themen 4
S NoSuchMethodError beim Ausführen einer C Methode über JNI Allgemeine Java-Themen 5
H OOP Daten über TCP Allgemeine Java-Themen 5
Pastafari Iterator über nested HashMaps Allgemeine Java-Themen 7
R ListIterator über mehrere Arrays Allgemeine Java-Themen 13
G Interface Laden der Konfiguration über Interfaces sinnvoll? Allgemeine Java-Themen 28
D Player Objekt - Frame über Server anzeigen lassen. Allgemeine Java-Themen 3
B VoIP-Gespräche über Computer führen Allgemeine Java-Themen 3
S Jar-File startet nicht über doppelklick Allgemeine Java-Themen 2
C Java Programm über SSH starten Allgemeine Java-Themen 16
K Internetverbindung über PuTTy herstellen?! Allgemeine Java-Themen 9
C Kapselung Warum graift man auf Variablen nur über Methoden und nich direkt zu? Allgemeine Java-Themen 10
G Auf Kommandozeile über Processobjekt mit Outputstream Allgemeine Java-Themen 3
S Input/Output Binärdatei über Bytestreams Allgemeine Java-Themen 4
S Kommunikation von Core und GUI über Schnittstellen Allgemeine Java-Themen 2
J Explorer über Code starten Allgemeine Java-Themen 15
kodela Problem mit Kopieren über FileChannel Allgemeine Java-Themen 4
L Java und Javascript um Distanz über Google Maps zu berchnen Allgemeine Java-Themen 10
B UNIX Shell befehl über JavaCode ausführen Allgemeine Java-Themen 19
D Java Excel API - Schreiben in Excel lässt sich nicht über Makro starten Allgemeine Java-Themen 18
M Ampelsteuerung über Timer in Java realisieren Allgemeine Java-Themen 3
L CMD über Java öffnen Allgemeine Java-Themen 8
U Mailclient über getDesktop.mail vorbereiten, Problem beim Anhang: Allgemeine Java-Themen 3
R Klasse über Button Event in anderer Klasse informieren Allgemeine Java-Themen 11
R Frequenzausgabe (2 Kanal) über Lautsprecherausgang Allgemeine Java-Themen 22
J Java-Klasse über Konsole starten Allgemeine Java-Themen 6
E FF Einstellungen über Programm ändern? Allgemeine Java-Themen 7
D JVM kann nicht über die jvm.dll gestartet werden? Allgemeine Java-Themen 1
S File im windowexploer öffnen über java Allgemeine Java-Themen 6
J Receive eines Hex-Bytes über COM-Port Allgemeine Java-Themen 4
Nicer Prozess über Prozessnamen beenden Allgemeine Java-Themen 15
reibi File über FileChannel locken Allgemeine Java-Themen 5
B Serialisierung mit Unterobjekten über Netzwerk Allgemeine Java-Themen 3
K Objekt-Austausch zwischen zwei Programmen über System-Clipboard Allgemeine Java-Themen 5
B parallele / Multithreaded Iteration über Map Allgemeine Java-Themen 12
D Unix/Linux Benutzer-Authentifikation über Java Allgemeine Java-Themen 3
M Tastatur eingabe über Buttons Allgemeine Java-Themen 15
S GPS-Maus über USB ansprechen Allgemeine Java-Themen 8
reibi Files über Classpath laden Allgemeine Java-Themen 22
M Selbst geschriebener InputStreamReader über einen beliebigen InputStream Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben