BufferedImage in VolatileImage casten

Status
Nicht offen für weitere Antworten.

Lulumann6

Aktives Mitglied
hallo ich hab ein problem, und zwar schaffe ich es nicht mein BufferedImage in ein VolatileImage zu casten. Ich will ganz gerne, dass mein BufferedImage-array list in mein zukünftiges globales VolatileImage-array background gecastet wird. so wie der code jetzt ist funktioniert er auch.

hier mal ein wenig code (in zeile 43 brauche ich hilfe):

Code:
import java.awt.*;
import java.awt.image.*;
import javax.imageio.ImageIO;


public class BackgroundManager{
	private int windowWidth;
	private int windowHeight;
	
	private int imageWidth;
	private int number = 0;
	

	private BufferedImage[] background; //das soll zu VolatileImage[] background gemacht werden
	
	public BackgroundManager(int windowWidth, int windowHeight, String backgroundURL) {
		this.windowHeight = windowHeight;
		this.windowWidth = windowWidth;

		BufferedImage background;
		
		BufferedImage[] list;
		

		
		try{
			background = ImageIO.read(getClass().getClassLoader().getResource(backgroundURL));
			imageWidth = background.getWidth();
			number = background.getWidth() / 100;
			 
				if(background.getWidth()%number > 0){	
					list = new BufferedImage[number+1];
					list[number] = background.getSubimage(number*100, 0, imageWidth%100, background.getHeight());
				}
				else{
					list = new BufferedImage[number];
				}
			for(int cnt = 0; cnt < number; cnt++){
				list[cnt] = background.getSubimage(cnt*100, 0, 100, background.getHeight());
			}
		

			this.background = list; //hier sitzt der knackpunkt
                              

		}
		catch(Exception e){
			
			System.out.println(e.toString());
		}

		
		
	}
	
	
	public void draw(Graphics dbg, Screen screen){
		
		int posn = screen.x/imageWidth/2;
		int cnt = posn;
		int cntEnd = 11 + posn;
		while(cnt < cntEnd){
			
			cnt++;
			try{

				dbg.drawImage(this.background[(screen.x/100 + cnt)%(number+1)], -screen.x%100+cnt*100-100+((screen.x/100 + cnt)/(number+1)*(1-background[number].getWidth())), 0, null);
			}
			catch(Exception e){
				System.out.println(e.toString());
			}

		}


	}
	
}
 

Quaxli

Top Contributor
Ich seh da nirgendwo ein VolatileImage.... ???:L
Prinzipiell wird ein VolatileImage aber nicht gecastet, sonder ein BufferedImage wird reingemalt.

Zwei Anmerkungen:

1. Techn. Lösung: Du erzeugst ein VolatileImage. Holst Dir von diesem das Graphics-Objekt und mals Dein BufferedImage da rein. Fertig.

2. Forensuche hätte was gebracht. Schau mal in den gar nciht so alten Thread "Tile-Map ruckelt" hier in diesem Unterforum, da haben wir das großteils diskutiert. Auch wie man ein VolatileImage prinzipiell einsetzt.
 

Lulumann6

Aktives Mitglied
Ich seh da nirgendwo ein VolatileImage....
Zeile 14 background muss zukünftig zum volatile gemacht werden.

Deinen Thread hab ich mir schon angesehen, dass hat mir aber eigenltich nicht wirklich was gebracht.

ich glaub mein problem ist irgendwie, dass ich nicht genau weis wie ich ein VolatileImageArray machen soll :bae:
 

Wildcard

Top Contributor
Warum denkst du das es sinnvoll ist mehr als ein VolatileImage zu haben?
Warum willst du überhaupt ein VolatileImage haben?
 

Lulumann6

Aktives Mitglied
ich will ein marioclon bauen, und bislang lief noch alles super, aber seitdem ich den hintergrund mit reingebaut habe, ist die cpu auslastung auf 100%,
Warum denkst du das es sinnvoll ist mehr als ein VolatileImage zu haben
da der hintergrund in mario immer wieder von vorne anfängt, habe das bild in 100 pixel stücke aufgeteilt, damit immer nur der teil der sichtbar ist auch gezeichnet wird.
 

Evolver

Bekanntes Mitglied
Nur ein VolatileImage als Bilschirmpuffer beim Rendern verwenden. Für alles andere kannst du z.B. BufferedImage verwenden, da bring dir VolatileImage nichts.
 

Wildcard

Top Contributor
Lulumann6 hat gesagt.:
ich will ein marioclon bauen, und bislang lief noch alles super, aber seitdem ich den hintergrund mit reingebaut habe, ist die cpu auslastung auf 100%,
Ein VolatileImage spart mitnichten CPU Zyklen. Lediglich der Vorgang wechsel von einem Bild auf das nächste lässt sich damit flüssiger realisieren.
Die CPU arbeitet immer mit 100%, es sei denn sie schläft. Ergo: zu wenig/zu kurz sleep aufgerufen.
 

Lulumann6

Aktives Mitglied
befor ich den hintergrund in mein spiel mit einprogrammiert habe lief alles noch mit unter 20% cpu und 60 fps, jetzt mit hintergrund hab ich nur noch 16 fps. und es liegt wirklich nur am hintergrund. wie soll ich denn meine fps wieder hoch bekommen? ich hab gedacht das der rechner bei bufferimage das ganze image vom arbeitsspeicher zur grafikkarte sendet, das wird doch wohl meine cpu in die höhe treiben, dann müsste es doch mit volatileimage besser gehen.
 

Lulumann6

Aktives Mitglied
Alles klar ich hab mein problem gefunden Mein hintergrundbild war zuerst ein png. jetzt mit jpg sieht es genau so gut aus und leuft wied einwandfrei. also brauche wohl doch kein volatileimage^^
 

Wildcard

Top Contributor
Du kannst auch ein png nehmen, solltest dann aber selbst dafür sorgen, dass du ein ColorModel ohne Alpha Kanal nimmst.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B BufferedImage Position Spiele- und Multimedia-Programmierung 8
B BufferStrategy zu BufferedImage? Irgendwie? Spiele- und Multimedia-Programmierung 2
D getsubimage aus BufferedImage und Rueckwandlung in ein ImagePlus bild Spiele- und Multimedia-Programmierung 0
V BufferedImage[] aus anderer Classe auslesen Spiele- und Multimedia-Programmierung 2
F [JMyron] Bild von int[] zu BufferedImage Spiele- und Multimedia-Programmierung 2
Q BufferedImage vs. Heap Space ‒ Warum wird der Speicher nicht freigegeben? Spiele- und Multimedia-Programmierung 6
M Performance Problem bei BufferedImage Spiele- und Multimedia-Programmierung 7
R BufferedImage > Integer.MAX_VALUE Spiele- und Multimedia-Programmierung 9
M Pixel eines BufferedImage bearbeiten (Performance) Spiele- und Multimedia-Programmierung 23
G BufferedImage -> Farbe wechselt willkürlich Spiele- und Multimedia-Programmierung 15
P int-Array zu BufferedImage (performance?) Spiele- und Multimedia-Programmierung 14
agentone BufferedImage transparent löschen Spiele- und Multimedia-Programmierung 12
radiac Stringtext mit BufferedImage Textur. Spiele- und Multimedia-Programmierung 6
kowa BufferedImage und Antialias Spiele- und Multimedia-Programmierung 2
T BufferedImage#setRGB #getRGB zu langsam Spiele- und Multimedia-Programmierung 4
J Zeichnen in BufferedImage und dieses in Datei speichern Spiele- und Multimedia-Programmierung 2
A Image in BufferedImage konvertieren Spiele- und Multimedia-Programmierung 2
Z Transparenz in BufferedImage Spiele- und Multimedia-Programmierung 8
Z JME - Rendering in BufferedImage Spiele- und Multimedia-Programmierung 14
A Bildbereich als BufferedImage Spiele- und Multimedia-Programmierung 3
M BufferedImage blass machen Spiele- und Multimedia-Programmierung 5
F BufferedImage verursacht OutOfMemoryError Spiele- und Multimedia-Programmierung 11
P Rotation von BufferedImage (Affine Transformation) Spiele- und Multimedia-Programmierung 7
S Image to BufferedImage Spiele- und Multimedia-Programmierung 3
Sogomn [TIPP] VolatileImage! Spiele- und Multimedia-Programmierung 1
E rotate VolatileImage Spiele- und Multimedia-Programmierung 6
S Swing und VolatileImage Spiele- und Multimedia-Programmierung 20
L Problem mit dem Backbuffer (VolatileImage) Spiele- und Multimedia-Programmierung 2
B String zu Objekt einer eigenen Klasse casten Spiele- und Multimedia-Programmierung 13

Ähnliche Java Themen


Oben