# nur Ausschnitt eines Image zeichnen



## flash2910 (5. Mrz 2011)

Hallo zusammen,

ich programmiere grade ein kleines Spiel und bin auf ein Problem gestoßen.
Und zwar hat das Spiel eine healthbar, die als Bild in das Programm geladen und dann
links oben in die Ecke gezeichnet wird. Allerdings nimmt die Länge der Healthbar natürlich
irgendwann ab, und dann sollen nur noch die z.B. 50 ersten Pixel der Healthbar gezeichnet werden.
Wenn ich jetzt allerdings die Methode drawImage(x,y,width,height) verwende, dann skaliert java
das bild und "quetscht" es damit. Gibt es eine Möglichkeit, einen Teil eines Images zu zeichnen, ohne
dass dabei das Bild skaliert wird?

Grüße

Ich


----------



## truesoul (5. Mrz 2011)

Hallo,

BufferedImage (Java Platform SE 6)

ich glaube das ist das was du suchst


----------



## flash2910 (5. Mrz 2011)

hmm, irgendwie tut das nich.
2 Probleme:
1. die Methode getSubimage(int,int,int,int) wird nicht gefunden
2. (dazu kams nicht, aber wirds wenn Prob 1 behoben ist) wie kann ich das Buffered Image dann in mein Graphics-Objekt zeichnen?


----------



## Illuvatar (5. Mrz 2011)

Zu den beiden Problemen:
1. Vielleicht hast du gar kein BufferedImage? Was anderes fällt mir dazu jetzt nicht ein 
2. Genauso wie du das Bild bisher zeichnest? ???:L

Aber: in diesem Fall einfacher und geeigneter ist vermutlich diese Funktion hier:
Klick mich!
Die ersten 4 int-Parameter geben das Rechteck an, wohin gezeichnet werden soll. Die zweiten 4 Parameter geben innerhalb deines Bilds das Rechteck an, das gezeichnet werden soll.


----------



## flash2910 (6. Mrz 2011)

1. Ich erzeuge eins mit bufferedimage bf= blablabla
2. Ich zeichne die Bilder mit drawImage - es gibt kein drawBufferedImage

Aber egal, dein Tipp is eh viel besser -- funktioniert super, danke =P Hatte die Funktion schon selbst gefunden, konnte aber nichts mit der Beschreibung in der API anfangen.


----------



## Illuvatar (6. Mrz 2011)

Nur für die Vollständigkeit:

1. Kann leider nicht sein  Vielleicht irgendwo ein Tippfehler?
2. Jedes BufferedImage ist auch ein Image. Deshalb kann man die ganz normalen drawImage-Methoden verwenden. (Und wenn du eh schon 
	
	
	
	





```
BufferedImage bf
```
 hast... wie zeichnest du das dann sonst? Jedenfalls kannst du einfach 
	
	
	
	





```
drawImage(bf, ...)
```
 machen )


----------



## flash2910 (7. Mrz 2011)

1. hm, möglich ist alles - is ja auch egal jetzt
2. aso, ok, hab mich schon gewundert =)

danke auf jeden fall fürs helfen


----------



## theodosis (9. Mrz 2011)

so wie ich den Healthbar sehe, es gibt eine einfache Loesung:

Du brauchst gar nichts mit dem Healthbar zu machen.  

Platziere das einmal und vergiss es.

Dann zeichne ein schwarzes JLabel ueber den Bar (oder g.fillRect wenn du auf j2me bist) 
und spiele mit der Laenge und mit der X-position von diesem JLabel (wenn du auf j2se bist) jedes Mal wo eine Aenderung in der Kraft von deinem Held-Figur passiert.

So hast Du das Effect wo das Healthbar nimmt ab oder zu.


----------



## flash2910 (10. Mrz 2011)

aber hinter der healthbar ist das bild des spiels zu sehen, wenn die health abnimmt, kann man sehen was dahinter ist. mit einem schwarzen label drüber wäre der bereich schwarz - das würde ja komisch aussehen. davon abgesehen ist das problem schon gelöst mit drawImage(Image, dx1,dy1,dx2,dy2,sx1,sx2,sy1,sy2)


----------



## theodosis (10. Mrz 2011)

Oh! dann sorry. 

Aber in diesem Screenshot es sieht aus, dass der Hintergrund, da wo der Healthbar liegt, einfarbig ist, so in diesem Fall das wuerde klappen mit dem einfarbigen JLabel.  Auf jeden Fall, gut dass du die Loesung gefunden hast.


----------

