java-forum.org - Java programmieren aus Leidenschaft
Java 6 Einstieg und professioneller Einsatz
Alter Preis: 34,90 EUR
Jetzt: 0,00 EUR

zzgl. Versandkosten

Zurück   java-forum.org - Java programmieren aus Leidenschaft > Java - Programmierung > Java Basics - Anfänger-Themen

Java Basics - Anfänger-Themen Fragen ausschließlich zu Java-Grundlagen von Ein- und Umsteigern

Antwort     Ist dieses Thema erledigt?
Themen-Optionen Thema durchsuchen Ansicht
Alt 20.06.2012, 21:00   #1 (permalink)
Neuer Benutzer
short
 
Registriert seit: 14.06.2012
Fachbeiträge: 21
Abgegebene Danke: 9
Erhielt 0 Danke für 0 Beiträge
Standard Buffered Image splitten und darstellen

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 Code: Quelltext in neuem Fenster öffnen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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 Code: Quelltext in neuem Fenster öffnen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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 Code: Quelltext in neuem Fenster öffnen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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 Code: Quelltext in neuem Fenster öffnen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
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
        
    }
 
}
Pincalibur ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 20.06.2012, 21:15   #2 (permalink)
Stammbenutzer
Megabyte
 
Benutzerbild von njans
 
Registriert seit: 01.06.2011
Fachbeiträge: 1.110
Abgegebene Danke: 5
Erhielt 218 Danke für 217 Beiträge
Java Code: Quelltext in neuem Fenster öffnen
1
pictureList.add(new BufferedImage(chunkWidth, chunkHeight, image.getType()));
Der Aufruf erstellt ein leeres BufferedImage.
Zitat:
BufferedImage#getSubimage(int x, int y, int w, int h) Returns a subimage defined by a specified rectangular region.
Das hilft wohl mehr.
__________________
Vorwiegend hier um Anfängern Hilfestellung zu geben.
DANKE Button nutzen, wenn Beiträge geholfen haben.
JAVA-TAGs nutzen, damit Java Code auch richtig dargestellt wird.
Sourcecode bei BitBucket: njans
njans ist gerade online  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Danke sagt:
Pincalibur (20.06.2012)
Alt 20.06.2012, 21:24   #3 (permalink)
Neuer Benutzer
short
Themenstarter
 
Registriert seit: 14.06.2012
Fachbeiträge: 21
Abgegebene Danke: 9
Erhielt 0 Danke für 0 Beiträge
Okay das erste Problem wäre damit gelöst:

Java Code: Quelltext in neuem Fenster öffnen
1
2
3
4
5
6
7
8
9
10
11
12
13
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 Code: Quelltext in neuem Fenster öffnen
1
2
3
4
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!

Geändert von Pincalibur (20.06.2012 um 21:38 Uhr)
Pincalibur ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Antwort     Ist dieses Thema erledigt?

Stichworte
image split

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Kleines Anzeige Problem(nur blanker Frame) javaman13 AWT, Swing, JavaFX & SWT 22 12.03.2012 21:48
Problem mit ActionEvent - Abfrage NordStar AWT, Swing, JavaFX & SWT 10 30.05.2011 14:05
Bilder der Diashow werden in anderen Bildern angezeigt samtkrabbe Java Basics - Anfänger-Themen 3 29.08.2010 15:29
Bild laden again. grayson Java Basics - Anfänger-Themen 1 29.10.2005 12:48
SWT: Label vertikal ausrichten Vatar AWT, Swing, JavaFX & SWT 11 20.05.2005 10:09


Lesezeichen

Forumregeln
Es ist Ihnen erlaubt, neue Themen zu verfassen.
Es ist Ihnen erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:24 Uhr.


Powered by vBulletin® Version 3.8.6 (Deutsch)
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.2
Thanks for Smilies by smilies.4-user.de