Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    883

    Ridimensionare immagine

    Devo ridimensionare un'immagine, utilizzo il seguente codice che funziona ma mi cambia i colori dell'imamgine
    (l'immagine di partenza è un file jpg 640*480 con colori grigio e azzurro e mi ritrovo un'immagine 150*112 rossastra
    Se non la ridimensiono i colori sono corretti, quindi è nel metodo getScaledInstance che c'è qualche problema.
    sapete aiutarmi?

    codice:
    int newWidth = 150;
    int newHeight = 112;
    
    Image image = ImageUtil.getImageFromFile(fileImmagine);
    Image resizedImage = image.getScaledInstance(newWidth, newHeight, Image.SCALE_SMOOTH);
    BufferedImage bufferedResizedImage = ImageUtil.toBufferedImage(resizedImage);
    ImageUtil.saveImage(bufferedResizedImage, nomeImmagineModificato,
    						Constants.IMAGES_THUMB_PATH);
    codice:
    public static Image getImageFromFile(File file) throws IOException {
    		Image image = ImageIO.read(file);
    		return image;
    	}
    
    	// This method returns a buffered image with the contents of an image
    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;
    	}
    
    	// This method returns true if the specified image has transparent pixels
    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();
    	}

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    883
    Ho provato anche usando il metodo

    codice:
    Image resizedImage = image.getScaledInstance(newWidth,
    						newHeight, Image.SCALE_DEFAULT);
    il risultato è uguale, l'immagine diventa rossastra

  3. #3
    Io faccio cosi' e funziona:

    codice:
    private BufferedImage resize (BufferedImage source, int newWidth, int newHeight)
            {
                int w = source.getWidth();
                int h = source.getHeight();
                
                BufferedImage destination = new BufferedImage (newWidth, newHeight, source.getType());
                Graphics2D g2d = destination.createGraphics();
                g2d.setRenderingHint (RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
                g2d.drawImage (source, 0, 0, newWidth, newHeight, 0, 0, w, h, null);
                g2d.dispose();
                return destination;
            }
    max

    Silence is better than bullshit.
    @mmarcon
    jHERE, Maps made easy

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.