Resizing an image in swing

前端 未结 4 1207
名媛妹妹
名媛妹妹 2021-01-06 02:46

I have snippet of code that I am using for the purpose of resizing an image to a curtain size (I want to change the resolution to something like 200 dpi). Basically the reas

相关标签:
4条回答
  • 2021-01-06 02:53

    Here is my solution:

        private BufferedImage resizeImage(BufferedImage originalImage, int width, int height, int type) throws IOException {  
            BufferedImage resizedImage = new BufferedImage(width, height, type);  
            Graphics2D g = resizedImage.createGraphics();  
            g.drawImage(originalImage, 0, 0, width, height, null);  
            g.dispose();  
            return resizedImage;  
        }  
    
    0 讨论(0)
  • 2021-01-06 03:13

    Another example is given here :

    2D-Graphics/LoadImageandscaleit.htm">http://www.java2s.com/Tutorial/Java/0261_2D-Graphics/LoadImageandscaleit.htm

    http://www.java2s.com/Code/JavaAPI/java.awt/ImagegetScaledInstanceintwidthintheightinthints.htm

    0 讨论(0)
  • 2021-01-06 03:13

    Try this CODE to resize image :

    public static Image scaleImage(Image original, int newWidth, int newHeight) {
        //do nothing if new and old resolutions are same
        if (original.getWidth() == newWidth && original.getHeight() == newHeight) {
            return original;
        }
    
        int[] rawInput = new int[original.getHeight() * original.getWidth()];
        original.getRGB(rawInput, 0, original.getWidth(), 0, 0, original.getWidth(), original.getHeight());
        int[] rawOutput = new int[newWidth * newHeight];
        // YD compensates for the x loop by subtracting the width back out
        int YD = (original.getHeight() / newHeight) * original.getWidth() - original.getWidth();
        int YR = original.getHeight() % newHeight;
        int XD = original.getWidth() / newWidth;
        int XR = original.getWidth() % newWidth;
        int outOffset = 0;
        int inOffset = 0;
        for (int y = newHeight, YE = 0; y > 0; y--) {
            for (int x = newWidth, XE = 0; x > 0; x--) {
                rawOutput[outOffset++] = rawInput[inOffset];
                inOffset += XD;
                XE += XR;
                if (XE >= newWidth) {
                    XE -= newWidth;
                    inOffset++;
                }
            }
            inOffset += YD;
            YE += YR;
            if (YE >= newHeight) {
                YE -= newHeight;
                inOffset += original.getWidth();
            }
        }
        return Image.createRGBImage(rawOutput, newWidth, newHeight, false);
    }
    
    0 讨论(0)
  • 2021-01-06 03:19

    You don't really have to care about the details of scaling images. The Image class has already a method getScaledInstance(int width, int height, int hints) designed for this purpose. Java documentation says:

    Creates a scaled version of this image. A new Image object is returned which will render the image at the specified width and height by default. The new Image object may be loaded asynchronously even if the original source image has already been loaded completely. If either the width or height is a negative number then a value is substituted to maintain the aspect ratio of the original image dimensions.

    And you can use it like this:

    // Scale Down the original image fast
    Image scaledImage = imageToScale.getScaledInstance(newWidth, newHighth, Image.SCALE_FAST);
    // Repaint this component
    repaint();
    

    Check this for a complete example.

    0 讨论(0)
提交回复
热议问题