# Größe bei bufferedImages ändern



## eolith421 (30. Okt 2009)

Hallo!
Ich habe diverse Bilder als Blob in der Datenbank gespeichert. Nach langem probieren und viel suchen konnte ich mithilfe des folgenden Servlet Code die Bilder aus der DB herauslesen und anschließend ausgeben. Das funktioniert auch wunderbar, das einzige was ich noch einfügen will, ist, dass ich die Größe des Bildes für zum anzeigen ändern kann. Nun meine Frage: Was muss ich beim Code ändern damit das funktioniert, wie kann man die Größe eines buffered image ändern?

Vielen dank für eure Hilfe!
Gruß,
Florian

Hier der Servlet Code:

```
@RemoteServiceRelativePath("showImage")
public class Images extends HttpServlet {
	
	public void doGet(HttpServletRequest req, HttpServletResponse res){
		
		if(req.getParameter("patientenid") != null){
			int imageid = Integer.parseInt(req.getParameter("patientenid"));
			try {
				StammdatenServer getImage = new StammdatenServer();
				BufferedImage image = new BufferedImage(50, 50, BufferedImage.TYPE_USHORT_GRAY);
				//BufferedImage image = new BufferedImage(100,100, BufferedImage.TYPE_INT_RGB);
				
				image = getImage.getPatientImage(imageid);
				
				/*BufferedImage scaledImage = null;
				Graphics2D graphics2D = image.createGraphics();
				graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
				RenderingHints.VALUE_INTERPOLATION_BILINEAR);
				graphics2D.drawImage(image, 0, 0, 100, 100, null)*/
				
				res.setContentType("image/jpeg"); 
				JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(res.getOutputStream());
				encoder.encode(image);
			}
			catch(Exception e){
				System.err.println(""+e);
			}
		}
	}
}
```


----------



## javimka (30. Okt 2009)

Ein BufferedImage kannst du folgendermassen vergrösseren. Sei orinigal dein Image:

```
BufferedImage scaled = new BufferedImage(newWidth, newHeight, original.getType());
scaled.getGraphics().drawImage(original,0,0,original.getWidth(),original.getHeight(),0,0,newWidth,newHeight,null)
```
Dann ist scaled dein Image mit neuer Grösse


----------



## eolith421 (3. Nov 2009)

Hallo!
Danke für die Antwort und entschuldigung für meine späte Antwort. Der Code hat mir geholfen nur habe ich jetzt noch ein Problem. Die Bilder werden nicht verkleinert sondern beschnitten, das heißt ich sehe dann nicht mehr das ganze Bild sondern nur einen Ausschnitt.

Hier der aktuelle Code:

```
int imageid = Integer.parseInt(req.getParameter("patientenid"));
			try {
				StammdatenServer getImage = new StammdatenServer();
				BufferedImage image = new BufferedImage(50, 50, BufferedImage.TYPE_USHORT_GRAY);
				//BufferedImage image = new BufferedImage(100,100, BufferedImage.TYPE_INT_RGB);
				
				image = getImage.getPatientImage(imageid);
				String width = image.getWidth()+".0";
				String height = image.getHeight()+".0";
				
				double v = Double.parseDouble(width)/Double.parseDouble(height);
				int newWidth = 100;
				double doubleNewHeight = newWidth/v;	
				int newHeight = (int) doubleNewHeight;
				System.out.println("Width: "+newWidth+"\nHeight: "+newHeight);
				
				// Größe ändern
				BufferedImage scaled = new BufferedImage(newWidth, newHeight, image.getType());
				scaled.getGraphics().drawImage(image,0,0,image.getWidth(),image.getHeight(),0,0,newWidth,newHeight,null);
				
				
				res.setContentType("image/jpeg"); 
				JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(res.getOutputStream());
				encoder.encode(scaled);
```


----------



## javimka (3. Nov 2009)

scaled.getGraphics().drawImage(image,0,0,newWidth,newHeight,null);

müsste eigentlich funktionieren.


----------



## eolith421 (3. Nov 2009)

Vielen Dank das war es, jetzt schauen die Bilder echt gut aus!

Gruß,
Florian

PS: Hier der funktionierende Servlet Code, als Paramter wird die ID des Patienten übergeben:


```
@RemoteServiceRelativePath("showImage")
public class Images extends HttpServlet {
	
	public void doGet(HttpServletRequest req, HttpServletResponse res){
		
		if(req.getParameter("patientenid") != null){
			int imageid = Integer.parseInt(req.getParameter("patientenid"));
			try {
				StammdatenServer getImage = new StammdatenServer();
				BufferedImage image = new BufferedImage(100, 100, BufferedImage.TYPE_USHORT_GRAY);
				
				image = getImage.getPatientImage(imageid);
				String width = image.getWidth()+".0";
				String height = image.getHeight()+".0";
				
				double v = Double.parseDouble(width)/Double.parseDouble(height);
				int newWidth = 100;
				double doubleNewHeight = newWidth/v;	
				int newHeight = (int) doubleNewHeight;
				
				// Größe ändern
				BufferedImage scaled = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_RGB);
				//scaled.getGraphics().drawImage(image,0,0,image.getWidth(),image.getHeight(),0,0,newWidth,newHeight,null);
				scaled.getGraphics().drawImage(image,0,0,newWidth,newHeight,null);
				
				res.setContentType("image/jpeg"); 
				JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(res.getOutputStream());
				encoder.encode(scaled);
			}
			catch(Exception e){
				System.err.println(""+e);
			}
		}
	}
}
```


----------

