ubuntuusers.de

[Java] Farbe in RGB-Objekt setzen

Status: Gelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

dersven

Anmeldungsdatum:
16. August 2005

Beiträge: 792

Wohnort: Kreuzlingen, Schweiz

Hallo.

Ich versuche gerade PNG-Dateien zu erzeugen, habe aber noch 2 Probleme:

1: wie kann ich 10*10 pixel gleichzeitig bearbeiten? (es gibt ein setRGB mit ganz vielen Parametern, aber einige davon verstehe ich leider nicht)

2: Wie kann ich die Farben setzen (derzeit arbeite ich mit methode setRGB, die nur drei Parameter hat:)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
	public BufferedImage returnSpielfeldBesetzungPNG() {
		// Vergroesserungsfaktor
		int faktor=10;
		
		// TYPE_INT_RGB = 1
		BufferedImage speicher = new BufferedImage(
				this.feldBreite*faktor,
				this.feldHoehe*faktor,
				BufferedImage.TYPE_INT_RGB
		);
		
		// gib die Spielfeldbesetzung aus
		for(int breite=0; breite<this.feldBreite; breite++) {
			for(int hoehe=0; hoehe<this.feldHoehe; hoehe++) {
				// Farbwert fuer das Feld
				int farbwert = (int)-this.spielFeld[breite][hoehe].getBesetzung()*100;
				
				for(int x=0; x<faktor; x++) {
					for(int y=0; y<faktor; y++) {
						speicher.setRGB(
								breite*faktor+x,
								hoehe*faktor+y,
								farbwert);
					}
				}
			}
		}
		
		return speicher;
		
	}

Das Teil ist total langsam, weil ich fuer jeden der vergroesserten Bildpunkte 100 pixel einzeln setze.

Bei den Farben muss man irgendeine Nummer eingeben. allerdings sind bei mir alle Farben blau, und wenn ich ein minus vorsetze gelb. wie ist z.B. der Farbwert von (0,255,0)? Ich habe mir die Klasse "Color" angeschaut, aber ersten gibt es dort keine set-Methoden, und zweitens keine get-methoden fuer so eine Farbwert-Nummer.

Kann mir da jemand helfen?

Gruesse und Danke

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17621

Wohnort: Berlin

BufferedImage hat eine Methode getGraphics (), und für Graphics kann man fillRect aufrufen - vielleicht hilft das weiter?

Die Farben sind i.d.R. so codiert, daß

1
int c = ((r * 255) + g) * 255 + b;

bzw.

1
2
Color col = new Color (r, g, b);
int c = col.getRGB ();  

1: wie kann ich 10*10 pixel gleichzeitig bearbeiten? (es gibt ein setRGB mit ganz vielen Parametern, aber einige davon verstehe ich leider nicht)

zu unklar gefragt. Welche verstehst Du nicht? Sprichst Du hiervon:

setRGB (int startX, int startY, int w, int h, int[] rgbArray, int offset, int scansize)

Sets an array of integer pixels in the default RGB color model (TYPE_INT_ARGB) and default sRGB color space, into a portion of the image data.

Parameters:

  • startX - the starting X coordinate

  • startY - the starting Y coordinate

  • w - width of the region

  • h - height of the region

  • rgbArray - the rgb pixels

  • offset - offset into the rgbArray

  • scansize - scanline stride for the rgbArray

Darf ich raten? Mit einige davon meinst Du die letzten 2.

dersven

(Themenstarter)

Anmeldungsdatum:
16. August 2005

Beiträge: 792

Wohnort: Kreuzlingen, Schweiz

user unknown schrieb:

1
2
Color col = new Color (r, g, b);
int c = col.getRGB ();  

naja, diese Funktion ist ja eher maessig sinnvoll, denn wenn ich einmal das color-Objekt erstellt habe, kann ich die Farbwerte ja nicht mehr aendern und muss ein neues Objekt erstellen. (Zumindest hat mir eclipse keine set-Funktion angegeben)

user unknown schrieb:

Parameters:

  • startX - the starting X coordinate

  • startY - the starting Y coordinate

  • w - width of the region

  • h - height of the region

  • rgbArray - the rgb pixels

  • offset - offset into the rgbArray

  • scansize - scanline stride for the rgbArray

Darf ich raten? Mit einige davon meinst Du die letzten 2.

Sogar die letzten drei bei rgbArray weiss ich einfach nicht was da rein soll. an sich will ich ja alles in einer Farbe haben. Wurde ich dann einfach einen array der Laenge 1 erzeugen mit einer Farbe, und dann offset=0 und scansize auf 1?

Gruesse

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17621

Wohnort: Berlin

dersven schrieb:

user unknown schrieb:

Parameters:

  • startX - the starting X coordinate

  • startY - the starting Y coordinate

  • w - width of the region

  • h - height of the region

  • rgbArray - the rgb pixels

  • offset - offset into the rgbArray

  • scansize - scanline stride for the rgbArray

Darf ich raten? Mit einige davon meinst Du die letzten 2.

Sogar die letzten drei bei rgbArray weiss ich einfach nicht was da rein soll. an sich will ich ja alles in einer Farbe haben. Wurde ich dann einfach einen array der Laenge 1 erzeugen mit einer Farbe, und dann offset=0 und scansize auf 1?

Nein, sondern ein Array der Größe 10x10, darin 100x die gleiche Farbe, offset=0 und scansize=width.

Antworten |