Closed Thread
Results 1 to 4 of 4

Thread: scale image

  1. #1
    bubuzzz is offline Newbie
    Join Date
    Jan 2009
    Posts
    1
    Rep Power
    0

    scale image

    hi all,
    i ve been trying to scale an image using java. The program runs well, however i found that the quality of the new image is not good, many rectangles appear in the image, especially when the dimensions of the new image are small (around 72 x 72 pixels).

    This is my code:

    Code:
    public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		
    		 BufferedImage bsrc;
    		try {
    		
    		   bsrc = ImageIO.read(new File("/home/bubuzzz/Tools/Icon/ksirc.png"));
    		   Image desc = bsrc.getScaledInstance(72, -1, Image.SCALE_SMOOTH);
    		   BufferedImage bdest = toBufferedImage(desc);   
    		   ImageIO.write(bdest,"PNG",new File("/home/bubuzzz/Desktop/ksirc.png"));
    		   
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    	
    	public static BufferedImage toBufferedImage(Image image) {
            if (image instanceof BufferedImage) {
                return (BufferedImage)image;
            }
        
            // This code ensures that all the pixels in the image are loaded
            image = new ImageIcon(image).getImage();
        
            // Determine if the image has transparent pixels; for this method's
            // implementation, see e661 Determining If an Image Has Transparent Pixels
            boolean hasAlpha = hasAlpha(image);
        
            // Create a buffered image with a format that's compatible with the screen
            BufferedImage bimage = null;
            GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
            try {
                // Determine the type of transparency of the new buffered image
                int transparency = Transparency.OPAQUE;
                if (hasAlpha) {
                    transparency = Transparency.BITMASK;
                }
        
                // Create the buffered image
                GraphicsDevice gs = ge.getDefaultScreenDevice();
                GraphicsConfiguration gc = gs.getDefaultConfiguration();
                bimage = gc.createCompatibleImage(
                    image.getWidth(null), image.getHeight(null), transparency);
            } catch (HeadlessException e) {
                // The system does not have a screen
            }
        
            if (bimage == null) {
                // Create a buffered image using the default color model
                int type = BufferedImage.TYPE_INT_RGB;
                if (hasAlpha) {
                    type = BufferedImage.TYPE_INT_ARGB;
                }
                bimage = new BufferedImage(image.getWidth(null), image.getHeight(null), type);
            }
        
            // Copy image to buffered image
            Graphics g = bimage.createGraphics();
        
            // Paint the image onto the buffered image
            g.drawImage(image, 0, 0, null);
            g.dispose();
        
            return bimage;
        }
    	
    	public static boolean hasAlpha(Image image) {
            // If buffered image, the color model is readily available
            if (image instanceof BufferedImage) {
                BufferedImage bimage = (BufferedImage)image;
                return bimage.getColorModel().hasAlpha();
            }
        
            // Use a pixel grabber to retrieve the image's color model;
            // grabbing a single pixel is usually sufficient
             PixelGrabber pg = new PixelGrabber(image, 0, 0, 1, 1, false);
            try {
                pg.grabPixels();
            } catch (InterruptedException e) {
            }
        
            // Get the image's color model
            ColorModel cm = pg.getColorModel();
            return cm.hasAlpha();
        }
    can you suggest any better way to scale the image? Thanks

  2. CODECALL Circuit advertisement
    Join Date
    Always
    Posts
    Many

     
  3. #2
    qwertino is offline Newbie
    Join Date
    Feb 2009
    Posts
    3
    Rep Power
    0

    Re: scale image

    You have to blur the image before resizing:

    see this page: componenthouse.com/article-20

  4. #3
    essimage is offline Newbie
    Join Date
    May 2009
    Posts
    1
    Rep Power
    0

    Re: scale image

    Here is a Visual basic function that allow you to scale a image
    also you can see from the example that at 300% increase there is little pixelation, if you use a blur function after you should not see any pixelation
    ess-image.com/Graphic/Image_Processing/ZoomImage.aspx

    I hope this helps you

  5. #4
    Join Date
    May 2008
    Location
    Hell
    Posts
    3,852
    Blog Entries
    4
    Rep Power
    49

    Re: scale image

    Quote Originally Posted by essimage View Post
    Here is a Visual basic function that allow you to scale a image
    also you can see from the example that at 300% increase there is little pixelation, if you use a blur function after you should not see any pixelation
    ess-image.com/Graphic/Image_Processing/ZoomImage.aspx

    I hope this helps you
    To butt in, the function is good however it's hard to apply it as java code...
    Try to help people in the way java was meant for

Closed Thread

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Similar Threads

  1. Large Scale Parsing and Searching
    By sadronmeldir in forum Java Help
    Replies: 0
    Last Post: 10-04-2009, 08:24 PM
  2. buttons dont move and scale with form
    By chemart in forum Visual Basic Programming
    Replies: 1
    Last Post: 12-08-2007, 04:42 PM

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts