Transparenz berechnen

Billie

Erfahrenes Mitglied
Hallo!

Also, zurzeit programmiere ich ein Java Spiel und jetzt habe ich Probleme mit der Darstellung der Grafiken.

Um es kurz zu Erklären, Grafiken werden im Spiel von der Klasse "Sprite" repräsentiert, diese wiederrum wird mit einem Image Objekt instanziert. Sprite hohlt sich dann sämptliche Pixel aus dem Image Objekt (PixelGrabber) und speichert sie in einem Array.

Folgendes, vor jedem neuen Zeichnen wird zuerst das Array, welches das Spielfeld repräsentiert, mit den Hintergrundpixeln gefüllt. Danach wird dieses Array noch mit den Pixeln der jeweiligen Grafiken/Sprites gefüllt - das geht aber nur bis Transparente Teile mit ins Spiel kommen.

Bei *.gif Bildern war es einfach, dort gibt es nur eine Transparenzstufe, nämlich +16777215. Ich habe bemerkt dass Transparente Werte einen Wert größer 0 und normale Farbwerte einen Wert kleiner als 0 haben.

Das Problem ist, wie berechne ich den richtigen Farbwert zwischen dem Hintergrundpixel und dem Vordergrundpixel. Also wie bekomme ich aus dem Farbwert rot (-65280) und einer Transparenz von zB +9006933 die richtige Endfarbe?

Grüße, Andreas

PS: für einfache Tutorials zum Thema Farben bin ich offen, falls jemand Links hat.
 
Hallo.

Ich weiß nicht, ob ich dir damit weiterhelfe. Ich habe für mein kleines Spiel auch den Pixelgrabber genutzt, mich allerdings nicht weiter mit Transparenz beschäftigt.

Allerdings ist in den Int-Werten des Arrays schon eine Alpha-Componente enthalten, die du zum Überblenden benutzen kannst. Guck mal hier rein:

Code:
	public void plotPixel(int x, int y, Color c)
	{
		if((x<SW)&&(y<SH))
		{
			if((x>=0)&&(y>=0))
			{
				long pos=y*SW+x;

				int red=c.getRed();
				int green=c.getGreen();
				int blue=c.getBlue();
				int alpha=c.getAlpha();

			 	int rgba = (alpha << 24) | (red << 16) | (green << 8) | blue;
				pixelBuffer[(int)pos]=rgba;
			}
		}
	}


Hast du bei großen Fenstern über 350x 350 und ebenso großem Array für den Hintergrund auch so arge Geschwindigkeitsprobleme?
 
Ja, ich glaube du hast mir geholfen. Du arbeitest mit der Color Klasse, die habe ich mir auch angesehen und ich glaube die kann mir das berechnen abnehmen.

Ich weiss nicht, Geschwindigkeitsprobleme habe ich bisher nicht, mein Feld ist 640 x 350 px groß. Ich versuche einfach Resourcen zu sparen, also Komponenten die nicht zu sehen sind auch nicht weit zu bearbeiten.

Andererseits, ich Moment bin ich noch nicht wirklich weit, was offen stehen lässt ob ich nicht auch noch Geschwindigkeitsprobleme bekommen.

Danke schon mal.
 
Also, ich habe es mit der Color-Klasse probiert, aber es funktioniert einfach nicht - ich weiß nicht wie ich die Farben kombinieren kann. Also hier nochmal das Problem:

-65280 1357369291
-65280 518382559
-65280 114414291

Also, links (-65280 = r 255, g 1, b 0) steht der Wert für die Hintergrundfarbe, rot. Rechts ist der Farbwert eines Bildes mit unterschiedlicher Transparenz (*.png).

Wie bekomme ich nun die richtige Endfarbe, wie wird Hintergrund mit Vordergrund kombiniert?
 
Zurück