Изменить размер ImageIcon или буферизованного изображения? - PullRequest
1 голос
/ 23 февраля 2012

Я пытаюсь изменить размер изображения до 50 * 50 пикселей. Я беру изображения с их пути, хранящегося в базе данных. У меня нет проблем с получением изображений и их отображением. Мне просто интересно, в какой момент я должен попытаться изменить размеры изображений. Должно ли это быть, когда я получаю изображение в виде буферизованного изображения или просто пытаюсь изменить размер значка?

while (rs.next()) {
                        i = 1;
                        imagePath = rs.getString("path");
                            System.out.println(imagePath + "\n");
                            System.out.println("TESTING - READING IMAGE");
                        System.out.println(i);

                        myImages[i] = ImageIO.read(new File(imagePath));
                        **resize(myImages[i]);**

                        imglab[i] = new JLabel(new ImageIcon(myImages[i]));
                        System.out.println(i);
                        imgPanel[i]= new JPanel();
                        imgPanel[i].add(imglab[i]);
                        loadcard.add(imgPanel[i], ""+i);     
                        i++; 

Приведенный выше код извлекает изображение и присваивает его ImageIcon, а затем JLabel. Я попытался изменить размер буферизованного изображения, используя метод изменения размера ниже. Не могли бы вы, ребята, пролить свет на то, почему это не работает для меня? Не получая никаких ошибок, просто изображение остается в исходном размере.

public static BufferedImage resize(BufferedImage img) {  
          int w = img.getWidth();  
          int h = img.getHeight(); 
          int newH = 50;
          int newW = 50;
          BufferedImage dimg = dimg = new BufferedImage(newW, newH, img.getType());  
          Graphics2D g = dimg.createGraphics();  
          System.out.println("Is this getting here at all " + dimg);
          g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);  
          g.drawImage(img, 0, 0, newW, newH, 0, 0, w, h, null);  
          g.dispose();  
          return dimg;
          }

1 Ответ

5 голосов
/ 23 февраля 2012

Вы вызываете resize () для каждого изображения, но не заменяете изображения в массиве.Таким образом, вывод resize () отбрасывается:

 myImages[i] = ImageIO.read(new File(imagePath)); // create an image
 resize(myImages[i]); // returns resized img, but doesn't assign it to anything
 imglab[i] = new JLabel(new ImageIcon(myImages[i])); // uses _original_ img

Вам нужно изменить среднюю строку на:

 myImages[i] = resize(myImages[i]);

, чтобы эта работа работала.

...