Farbwerte II.
-
Hallo,
ich habe euch ja schonmal diesbezüglich befragt, jedoch kam ich weiter nicht wirklich weiter.Jetzt habe ich mich noch etwas weiter informiert und mir aus verschiedenen andeeren Foren, Tuts und sonstigem (und natürlich auch etwas zusammengeschnipsel von mir), folgendes zusammen gebastelt.
MEin PRoblem ist nur, dass ich nicht ralle was ich eigentlich dabei zurück bekomme.
package gif; import java.awt.*; import java.awt.event.*; import java.applet.*; import java.lang.String.*; public class Bild extends Applet implements ActionListener { Image bild = null; int wert; int a=0,r=0,g=0,b=0; int pixel=102; int x=30,y=30; Button go=new Button("go"); public void init() { go.addActionListener(this); add(go); setBackground(Color.black); bild = getImage (getDocumentBase(), "T1.gif"); } public void paint(Graphics g) { g.drawImage (bild,295,169,this); g.setColor(Color.white); g.drawString("Die Sonne",385,220); } public void actionPerformed(ActionEvent e) { Graphics g=getGraphics(); wert= getRGB(pixel); g.setColor(Color.white); g.drawString("Farbwert " + wert,x,y); y=y+30; } public int getAlpha(int a){ return r; } public int getRed(int r){ return r; } public int getGreen(int g){ return g; } public int getBlue(int b){ return b; } public int getRGB(int pixel) { // return (getAlpha(pixel) << 24) // | (getRed(pixel) << 16) // | (getGreen(pixel) << 8) // | (getBlue(pixel) << 0); return (getRed(pixel) <<16); } }
Also okay ihr habt das Bild nicht aber man sieht nen schwarzen Hintergrund mit ner Sonnenfinsternis drauf.
Ich überprüfe im MOment nur die Farbwerte in dem Bereich wo es nur schwarz ist.Was ich nur nicht ralle:
Warum liefert mir der String Wert, dann nur verschiedene Werte zurück auch wenn ich die Pixelvariable nur um eins hochsetze.
Eigentlich sollte der Farbwert da gleich sein.Warum ist er das nicht ?
Kann mir einer erklären wie sich der String zusammen setzt und wie man das erklären kann.
-
Nun ja deine get-Methoden haben Parameter r, g, b
und innerhalb der Methode gibst du genau dieses r oder g oder b zurück?Eine get-Methode hat normalerweise keine Parameter
Edit:
Dein Aufruf von getRed(pixel) << 16 wird dir also immer pixel << 16 zurückliefern ... da kannst du den Aufruf von getRed dir gleich sparen
-
Ja ich habe diese yy 16 etc. GEschichten jetzt mal rausgenommen und so wie du gesagt hast gibt er dann nur noch die Pixel-Variable aus.
Zu deiner Hilfe:
Nehme ich aber die return Anweisung bzw. den Parameter raus funktioniert es nicht.Kannst du also deine Hilfe nochmal prezisieren?
Danke
Michael
-
Ich meine Folgendes:
Du schreibst
public int getRed(int r){ return r; }
Das wird dir als return-Wert immer r geben (nämlich das übergebene r!)
Du willst aber wahrscheinlich den Wert des r's zurückgeben, welcher innerhalb deiner Klassendefinition als Membervariable definiert ist, oder?
-
Ja genau das wird es sein.
Wenn ich haber den ebend von dir gewählten Ausschnitt ganz rausnehme bekomme ich nen Fehler, wenn ich das return rausnehme bekomme ich nen Fehler und folglich weiss ich nicht was ich machen soll, damit genau das nicht passiert was ihr schon als Fehler erkannt habt.
Danke
Michael
-
Ok also nochmal zu meinem Verständnis:
Der Parameter r, g bzw. b der Methoden getRed, getGreen bzw. getBlue stellt die Nummer des Pixels dar, dessen R-, G- oder B-Farbwert du haben möchtest. Ist das richtig?
Wenn das so ist dann solltest du für die Parameter der einzelnen Methoden andere Namen ausdenken und sie nicht genauso benennen wie Membervariablen deiner Klasse ...
-
Also ich habe im wesentlichen 2 Probleme.
1. Ich steht auf dem Schlauch
2. Es klappt nichts ...Also es schaut wohl wie folgt aus:
Das Programm nimmt den Pixelwert setzt ihn in der getRGB Funktion bei z.B: der getBlue() ein, diese liert dern Wert genau so zurück und am Ende habe ich über zich Umwege eigentlich nur den Wert der pixel Variable ausgegeben.so weit so gut ...
Nun aber die Frage was meinst du mit Membervariablen meiner Klasse?
Wo genau ist der Fehler ?Danke für deine / eure Geduld
Michael
-
Das sind die Membervariablen deiner Klasse
Image bild = null; int wert; int a=0,r=0,g=0,b=0; int pixel=102; int x=30,y=30;
In der Regel gibt man einen Pixel nicht durch seine Reihenfolge im Bild an sondern über x/y-Koordinaten. Vielleicht solltest du dir die Klasse Image und Graphics noch einmal genauer ansehen. Diese Klassen bieten bereits Methoden Farbwerte eines mit x/y-Koordinaten gegebenen Pixels herauszubekommen.
-
Das war zwar noch nicht wirklich was ich hören wollte aber ich habe nochmal nen bischen rumgestöbert und dabei fiel der Begriff "PixelGrabber" ... war es diese Funktion, die du meintest, oder noch nicht?
Wenn nicht dann sag doch einfach, was dir im Kopf rumgeistert und spann mich nicht weiter auf die Folter.
BYE
Michael