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:
Die splitImage Methode:
Das zusammenbauen der Teilbilder:
Meine JComponente:
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
}
}