Jak podzielić zdjęcie na prostokątne "puzzle"?

0

Witam,

Chciałbym zapytać w jaki sposób można podzielić zdjęcie w javie. Mój program układa "puzzle" w JFrame. Jeśli użytkownik wprowadzi poprawną wartość na klawiaturze, wtedy program dodaje jeden element układanki ze zdjęcia. Teraz mam fizycznie podzielone zdjęcie na 24 elementy, ale chciałbym, żeby użytkownik mógł wrzucić własne zdjęcie, które program by dzielił na 24 elementy.

Proszę o podpowiedź, w jaki sposób mogę tego dokonać.

Pozdrawiam

1

Ja dzieliłem w taki sposób (rows i cols to ilości kawałków w poziomie i pionie). Wczytywałem obrazek do zmiennej image klasy ImageIcon, a potem:

        width = image.getIconWidth();
        height = image.getIconHeight();
        blockWidth = width/cols;
        blockHeight = height/rows;
        img = image.getImage();
        for(int w = 0;w < rows;w++)
        {
            for(int k = 0;k < cols;k++)
            {
                Image slice = createImage(new FilteredImageSource(img.getSource(),  new CropImageFilter(k * blockWidth, w * blockHeight, blockWidth, blockHeight)));
            }
     }
0

Dzięki za szybką odpowiedź. Nie jestem jeszcze biegły w języku i moje samodzielne próby sprawdzenia Twojego kodu nie powiodły się. Żeby mieć pewność wartości: width, height, blockWidth i blockHeight to inty, a img to Image. Image slice to efekt podziału. Wstyd się przyznać, ale nie potrafię wyświetlić Image slice, żeby sprawdzić co się pod min kryje.

Wcześniej o tym nie wspomniałem, ale podzielone zdjęcie miałem zapisane w tabeli. Dzięki temu mogłem dodawać kolejne elementy układanki. Obecnie mam 24 zdjęcia zapisane w formie tabeli w ImageIcon. Czy można wykorzystać Twój kod tak, aby Image slice był w formie tabeli ImageIcon? Jeśli nie co mógłbym zmienić, żeby uzyskać podobny efekt?

public class Puzzle extends JPanel {

    static ImageIcon kot2 = new ImageIcon("src/com/example/java/kot2.jpg");

    public static JLabel[] pole = new JLabel[24];
    public static ImageIcon[] kot1 = new ImageIcon[24];

    public Puzzle(){

        for (int i = 0; i < pole.length ; i++) {
            kot1[i]= new ImageIcon("src/com/example/java/puzzle/kot"+(i+1)+".jpg");
            add(pole[i]=new JLabel(kot2));
        }
        setBackground(null);
        setLayout(new GridLayout(6,4));
    }

1
add((pole[i] = new JLabel(new ImageIcon(slice)));
0

Dzięki za podpowiedź. Chwile to zajęło, ale udało mi się zastosować Twój kod. Zrobiłem to w ten sposób:

public class Guzik extends JPanel {

    static ImageIcon image = new ImageIcon("src/com/example/java/foto.jpg");
    static Image slice1[]= new Image[24];
    static Image slice2[][]= new Image[6][4];
    public static JLabel[] pole = new JLabel[24];
 
    public Guzik(){

        int width = image.getIconWidth();
        int height = image.getIconHeight();
        int blockWidth = width/4;
        int blockHeight = height/6;
        Image img = image.getImage();

        int licznik=0;
        for(int w = 0;w < 6;w++)
        {
            for(int k = 0;k < 4;k++)
            {
                slice2[w][k] = createImage(new FilteredImageSource(img.getSource(),
                        new CropImageFilter(k * blockWidth, w * blockHeight, blockWidth, blockHeight)));
                
                slice1[licznik]=slice2[w][k];
                add((pole[i] = new JLabel(new ImageIcon(slice1[i]))));
                licznik++;
            }
        }
      
        setBackground(null);
        setLayout(new GridLayout(6,4));       
    }

Pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1