Avatar billede t_mons Nybegynder
10. maj 2004 - 13:04 Der er 6 kommentarer og
1 løsning

Billeder reducering

Hey

hvordan kan man lave en funktion der tage et billede (stien til et billede) som inparameter.
derefter skal den forstørre / formindske billedet til en bestemt størrelse firkant (feks. 100 x 100 pixels)

er der nogen der kan give et eksempel.. :o)
Avatar billede t_mons Nybegynder
10. maj 2004 - 13:06 #1
skal selvfølgelig vises !!!
Avatar billede _carsten Nybegynder
10. maj 2004 - 14:52 #2
Her er et eksempel, husk at indsætte stien til billedet i bunden af denne klasse

import java.awt.Graphics;
import java.awt.Image;

public class JFrame_X extends javax.swing.JFrame {

    public JFrame_X() {
        initComponents();
        toolkit = java.awt.Toolkit.getDefaultToolkit();
        image = toolkit.getImage(stiTilBillede);
        pack();
        setSize(500,500);
    }

    private void initComponents() {
        jSlider1 = new javax.swing.JSlider();
        jPanel1 = new javax.swing.JPanel();

        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosing(java.awt.event.WindowEvent evt) {
                exitForm(evt);
            }
        });

        jSlider1.setPaintLabels(true);
        jSlider1.setPaintTicks(true);
        jSlider1.setMinorTickSpacing(1);
        jSlider1.setMajorTickSpacing(5);
        jSlider1.setValue(0);
        jSlider1.setSnapToTicks(true);
        jSlider1.addChangeListener(new javax.swing.event.ChangeListener() {
            public void stateChanged(javax.swing.event.ChangeEvent evt) {
                scale(evt);
            }
        });

        getContentPane().add(jSlider1, java.awt.BorderLayout.NORTH);

        getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER);

    }

    private void scale(javax.swing.event.ChangeEvent evt) {
        Graphics g = jPanel1.getGraphics();
        jPanel1.update(g);
        g.drawImage(image, 200,200,jSlider1.getValue(), jSlider1.getValue(), this);
    }
   
    private void exitForm(java.awt.event.WindowEvent evt) {
        System.exit(0);
    }

    public static void main(String args[]) {
        new JFrame_X().show();
    }
   
    private javax.swing.JPanel jPanel1;
    private javax.swing.JSlider jSlider1;
    private java.awt.Toolkit toolkit;
    private java.awt.Image image;
    String stiTilBillede = "";
}
Avatar billede _carsten Nybegynder
10. maj 2004 - 19:20 #3
OK ????
Avatar billede t_mons Nybegynder
10. maj 2004 - 19:29 #4
det jeg egentlig er på udkig efter er følgende:

en app hvor jeg kan hente en fil  (ala dialogbox)
når jeg så har hentet billedet, skal applikationen kalde en funktion, der tilpasser billedet, hvis billedet er for stort kaldes en funktion der mindsker billedet og hvis billedet er for lille, så kaldes en funktion der forstørrer billedet ....

Arealet hvor billedet skal vises skal være 400 x 400..

giver det mening
Avatar billede _carsten Nybegynder
10. maj 2004 - 20:19 #5
Dialogbokse er der tusinder af herinde, det er bare at søge lidt.

Hvis det altid skal være 400 x 400, er det nemt at løse

    public JFrame_X() {
        initComponents();
        toolkit = java.awt.Toolkit.getDefaultToolkit();
        image = toolkit.getImage(stiTilBillede);
        image400x400 = image.getScaledInstance(400,400, Image.SCALE_SMOTH);
        pack();
        setSize(500,500);
    }

private java.awt.Image image400x400;

Og så vis det
Avatar billede t_mons Nybegynder
10. maj 2004 - 21:05 #6
takker  carsten

kigger på det imorgen....
Avatar billede t_mons Nybegynder
17. maj 2004 - 09:47 #7
jeg fik det selv løst....  men tak for din tid..

public void MinimumBoxFill(String image, double target_width, double target_height, String destination) //forstørre / formindske med fastholdelse af aspekt ratio, ( placer billedet indenfor en given firkant, uden at overskride )
  {
          try
          {
            double targetWidth  = target_width;       
            double targetHeight = target_height;       
            // Read source image       
            BufferedImage src = ImageIO.read(new File(image));       
            double scale;       
            int width = src.getWidth();       
            int height = src.getHeight();       
       
            if (width > height)
            {           
                // Landscape orientation           
                scale = targetWidth / width;           
                if (scale * height > targetHeight)
                {               
                    scale = targetHeight / height;           
                }       
            }       
            else
            { 
                // Portrait orientation           
                scale = targetWidth / height;           
                if (scale * width > targetHeight)
                {
                    scale = targetHeight / width;           
                }
            }
       
            AffineTransform trans = new AffineTransform();       
            trans.setToScale(scale, scale);       
            AffineTransformOp op = new AffineTransformOp(trans, AffineTransformOp.TYPE_NEAREST_NEIGHBOR);
            BufferedImage dest = op.createCompatibleDestImage(src, null);       
            op.filter(src, dest);       
            // Write result image       
            String outputFormat = destination.substring(destination.length() - 3);       
            ImageIO.write(dest, outputFormat, new File(destination));
          }
          catch(Exception e)
          {
              System.out.println("Error in MinimumBoxFill : " + e + " : message = " + e.getMessage());
          }
  }
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester