Erste Schritte Buffered Image splitten und darstellen

Pincalibur

Mitglied
Hi, ich versuche für ein kleines Spiel ein Bild in beliebig viele Teile zu splitten um sie dann verschieben zu können.
Dazu lade ich mithilfe einer URL ein BufferedImage (dieses lässt sich auch noch darstellen) und gebe dieses dann meiner Methode splitImage(BufferedImage img) mit.
Dabei habe ich 2 Probleme:

1. Die Teilbilder sind komplett schwarz

2. Es wird nie mehr als ein Teilbild auf das Panel gezeichnet
(Möchte keinen Layout Manager benutzen, weil die Teilbilder sich noch bewegen sollen).

Das Laden des Bildes:
Java:
public static BufferedImage loadImage(String name)
	{    
		BufferedImage result = null;
        try
        {
        	URL path = ImageSet.class.getClassLoader().getResource("pincalibur/slide_game/images/" + name);
            result = ImageIO.read(path);
        }
        catch (IOException exception)
        {
            System.out.println( "Cannot load image \"" + name + "\"");
            exception.printStackTrace();
        }
        return result;
	}

Die splitImage Methode:
Java:
private void splitImage(BufferedImage img)
	{
		BufferedImage image = img;  
  
        int chunkWidth = image.getWidth() / columns; // determines the chunk width and height  
        int chunkHeight = image.getHeight() / rows;  
        pictureList = new ArrayList<BufferedImage>();
        for (int x = 0; x < rows; x++) {  
            for (int y = 0; y < columns; y++) {  
            	pictureList.add(new BufferedImage(chunkWidth, chunkHeight, image.getType()));
            }  
        }  
        System.out.println("Splitting done");  
	}

Das zusammenbauen der Teilbilder:
Java:
private void createComponents()
	{
		int i = 0;
		int posX = 0;
		int posY = 0;
		BufferedImage img = ImageSet.loadImage( imageSet.cardImageStr() + "1" + imageSet.pictureFormat()); 
		splitImage(img);
		for(int y = 0; y < columns; y++)
		{
			posX = 0;
			for(int x = 0; x < rows; x++)
			{
				if(i < pictureList.size())
				{
					SlideGameComponent component = new SlideGameComponent();
					component.setImage(pictureList.get(i));
					component.setGUIListener(this);
					component.setLocation(posX, posY);
					posX += pictureList.get(i).getWidth(null);
					componentList.add(component);
					this.add(component);
					i++;
				}
			}
			posY += pictureList.get(i -1).getWidth(null);
		}
		
		this.setSize(img.getWidth(null), img.getHeight(null));
		
	}

Meine JComponente:
Java:
public class SlideGameComponent extends JComponent implements MouseListener{
	
	//attributes
	private ImageIcon imageIcon;
	private GUIListener guiListener;
	private int id;
	
	//constructors
	public SlideGameComponent()
	{
		super();
		this.addMouseListener(this);
	}
	
	//methods
	public ImageIcon getImage()
	  {
		  return imageIcon;
	  }
	public void setImage( Image img )
	  {
	    imageIcon = new ImageIcon(img);
	    if ( imageIcon != null )
	    {
	    	this.setSize(img.getWidth(null), img.getHeight(null));
	    	repaint();
	    }
	  }
	public int getID()
	  {
		  return id;
	  }
	public void setID(int id)
	  {
		  this.id = id;
	  }
	public void setGUIListener(Object gui)
	  {
		  guiListener = (GUIListener) gui;
	  }
	@Override
	protected void paintComponent( Graphics g )
	  {
		  imageIcon.paintIcon(this, g, this.getX(), this.getY());
	  }
	@Override
	public void mouseClicked(MouseEvent e) {
		// TODO Auto-generated method stub
	}

	@Override
	public void mouseEntered(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseExited(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mousePressed(MouseEvent e) {
		guiListener.MouseClicked(this);
		
	}

	@Override
	public void mouseReleased(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

}
 

njans

Top Contributor
Java:
pictureList.add(new BufferedImage(chunkWidth, chunkHeight, image.getType()));
Der Aufruf erstellt ein leeres BufferedImage.
BufferedImage#getSubimage(int x, int y, int w, int h) Returns a subimage defined by a specified rectangular region.
Das hilft wohl mehr.
 

Pincalibur

Mitglied
Okay das erste Problem wäre damit gelöst:

Java:
private void splitImage(BufferedImage img)
	{
        int chunkWidth = img.getWidth() / columns; // determines the chunk width and height  
        int chunkHeight = img.getHeight() / rows;  
        pictureList = new ArrayList<BufferedImage>();
        for (int x = 0; x < columns; x++) {
        	for(int y = 0; y < rows; y++)
        	{
        		pictureList.add(img.getSubimage(x * chunkWidth, y * chunkHeight, chunkWidth, chunkHeight));
        	}            
        }  
        System.out.println("Splitting done");  
	}

Wie bekomme ich nun mehr als 1 Teilbild auf das Panel?
Bei meinem Panel setze ich das Layout auf null, habe gelesen damit kann ich die Positionen und Components frei setzen:
Java:
private void initComponents()
	{
		this.setLayout(null);
	}

Er zeigt aber nur den obersten an.

Edit:
Die X und Y Koordinaten wurden nicht richtig gesetzt, deswegen wurde alle bei 0,0 gezeichnet.
Habe das Problem mit eigenen Variabeln gelöst.
Trotzdem Danke an alle die sich Gedanken gemacht haben!
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
S buffered image Java Basics - Anfänger-Themen 18
F Buffered Image über Socket versenden Java Basics - Anfänger-Themen 6
B polyline auf buffered image malen Java Basics - Anfänger-Themen 2
P Buffered Image, Bereich ausschneiden Java Basics - Anfänger-Themen 3
T Buffered Stream leert Txt File Java Basics - Anfänger-Themen 3
L buffered reader produziert zu viele und seltsame zeichen Java Basics - Anfänger-Themen 2
V Buffered Reader, erst ab bestimmter Zeile auslesen? Java Basics - Anfänger-Themen 8
K Probleme mit Buffered Reader Java Basics - Anfänger-Themen 8
I Buffered Images vergleichen Java Basics - Anfänger-Themen 3
P Buffered Reader an Anfang setzen Java Basics - Anfänger-Themen 4
F Was gibt der Buffered Reader zurück bei Dateiende? Java Basics - Anfänger-Themen 2
H Buffered Reader Java Basics - Anfänger-Themen 7
G Buffered REader, String, ist mein code korrekt? Java Basics - Anfänger-Themen 4
G mit Buffered Writer innerhalb einer Datei Zeilen etc. einfüg Java Basics - Anfänger-Themen 4
G Area mit Teil-Image füllen Java Basics - Anfänger-Themen 0
B Image Matching in Memory Minigame Java Basics - Anfänger-Themen 7
J JLabel bzw. Image Icon mit KeyEvent bewgen Java Basics - Anfänger-Themen 9
Butzibu Image Loader lädt nicht alle Bilder: Java Basics - Anfänger-Themen 4
Schniffi Nur bestimmte Bilder aus einem Array auf Image Button anzeigen lassen Java Basics - Anfänger-Themen 3
T Image Icon Java Basics - Anfänger-Themen 3
K File (png) in Image laden Java Basics - Anfänger-Themen 3
M Image löschen Java Basics - Anfänger-Themen 2
G Image in Vordergrund Java Basics - Anfänger-Themen 3
B InputStream (PDF) nach Image (PNG / JPG) konvertieren? Java Basics - Anfänger-Themen 2
S Image Datei selektieren und in Projekt Verzeichnis abspeichern/kopieren Java Basics - Anfänger-Themen 16
N Best Practice Image recognition fuzzy Superhash berechnen Java Basics - Anfänger-Themen 1
H Image laden Java Basics - Anfänger-Themen 4
R Image drehen Java Basics - Anfänger-Themen 1
R Image Teilen Java Basics - Anfänger-Themen 3
B Image laden im GridBagLayout Java Basics - Anfänger-Themen 3
N Image von Resource wird nicht geladen Java Basics - Anfänger-Themen 2
N Datentypen Image zu Byte-Array Java Basics - Anfänger-Themen 4
F Image wird nicht gezeichent?! Java Basics - Anfänger-Themen 21
N Hintergrund image mit .setContentPane Java Basics - Anfänger-Themen 6
W aus Methode auf JLabel zugreifen und Image verändern Java Basics - Anfänger-Themen 1
V Scale displayed Image via JCheckBox Java Basics - Anfänger-Themen 1
I Resize Image - Einlesen von InputStream Java Basics - Anfänger-Themen 3
M Image Download klappt nicht mehr Java Basics - Anfänger-Themen 4
Chava Testprojekt.Text.Image.Button Java Basics - Anfänger-Themen 4
S Image nach MausMotion rotieren Java Basics - Anfänger-Themen 7
L Erste Schritte Java Image und Video-Slideshow GUI Java Basics - Anfänger-Themen 3
D Kleinere Positionsangabe als einzelne Pixel bei Image? Java Basics - Anfänger-Themen 28
S Image in Panel laden Java Basics - Anfänger-Themen 12
H Prüfen, ob jpg image schon vorhanden ist, bevor es geladen wird Java Basics - Anfänger-Themen 13
V Image Crawler Java Basics - Anfänger-Themen 3
P Erste Schritte Image anzeigen in ausführbarer jar mit der Toolkit class Java Basics - Anfänger-Themen 8
T udp -> bytearray -> image -> ausgabe via frame Java Basics - Anfänger-Themen 6
A Image (Bitmap) in String (für XML) Java Basics - Anfänger-Themen 7
T Image ist Null - warum? Java Basics - Anfänger-Themen 18
V Image -> 2D Array (int [][]) Java Basics - Anfänger-Themen 4
L Image laden und auf jPanel ausgeben Java Basics - Anfänger-Themen 7
V FileInputStream auf ein swt.Image Java Basics - Anfänger-Themen 6
A Wie kann man etwas von Typ Image wieder löschen? Java Basics - Anfänger-Themen 7
F Image übertragen und zeichnen Java Basics - Anfänger-Themen 8
G Problem mit Image.IO.read( File ) Java Basics - Anfänger-Themen 3
G Image spiegeln Java Basics - Anfänger-Themen 17
Y Trotz add wird Image in GradBagLayout nicht angezeigt Java Basics - Anfänger-Themen 5
Spin Image helper Java Basics - Anfänger-Themen 6
M Image Metadaten setzen Java Basics - Anfänger-Themen 2
Spin Backgrond Color von Image ermitteln Java Basics - Anfänger-Themen 2
C Image draw... Java Basics - Anfänger-Themen 7
M Image-Icon Ändern Java Basics - Anfänger-Themen 15
J Image upload auf ImageShack,TinyPic usw. Java Basics - Anfänger-Themen 11
R Image laden die Zweite Java Basics - Anfänger-Themen 4
R Image laden Java Basics - Anfänger-Themen 10
M Image zeichenen mit Double Werten Java Basics - Anfänger-Themen 4
G Image to File Java Basics - Anfänger-Themen 4
T Image Position erkennen Java Basics - Anfänger-Themen 6
Spin Image skalieren Java Basics - Anfänger-Themen 2
Spin Background Image Java Basics - Anfänger-Themen 2
K Image / drawImage Java Basics - Anfänger-Themen 2
F Image Editor Java Basics - Anfänger-Themen 2
R Image aus jar laden (dieses mal awt) Java Basics - Anfänger-Themen 19
B Image flimmert Java Basics - Anfänger-Themen 4
Povlsen84 Image exakt erzeugen Java Basics - Anfänger-Themen 5
B Teile einer Image in neue Image kopieren Java Basics - Anfänger-Themen 4
X ARGB Werte auslesen aus Image Java Basics - Anfänger-Themen 2
O Image Loader laedt bild nicht Java Basics - Anfänger-Themen 11
H String to image! Java Basics - Anfänger-Themen 6
H2SO3- image beim awt frame wegmachen Java Basics - Anfänger-Themen 2
M Probleme mit Manifest und Image Java Basics - Anfänger-Themen 2
T Java Bilderverwaltung - Image Fetcher Problem Java Basics - Anfänger-Themen 4
E Image in Datei speichern bzw anzeigen Java Basics - Anfänger-Themen 5
G Image laden Java Basics - Anfänger-Themen 16
O Drag & Drop mit Image? Java Basics - Anfänger-Themen 2
G Image/-Icon wird nicht auf JPanel angezeigt Java Basics - Anfänger-Themen 4
M Image aus JPanel Java Basics - Anfänger-Themen 2
G Kompletten (image) Array löschen Java Basics - Anfänger-Themen 14
P Fileinputstream to image? Java Basics - Anfänger-Themen 3
G Image Problem Java Basics - Anfänger-Themen 5
G Image Java Basics - Anfänger-Themen 3
M draw.Image Java Basics - Anfänger-Themen 11
O Image laden Java Basics - Anfänger-Themen 6
G Image Java Basics - Anfänger-Themen 2
S Image-Datei mit relativem Pfad angeben Java Basics - Anfänger-Themen 3
S Botton und Image kombinieren Java Basics - Anfänger-Themen 3
S import javax.image.io.*; funktioniert nicht Java Basics - Anfänger-Themen 28
D Image drehen Java Basics - Anfänger-Themen 6
DeeDee0815 Uncaught error fetching image Java Basics - Anfänger-Themen 2
A Image erstellen Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben