Größe bei bufferedImages ändern

Status
Nicht offen für weitere Antworten.

eolith421

Mitglied
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:
Java:
@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

Top Contributor
Ein BufferedImage kannst du folgendermassen vergrösseren. Sei orinigal dein Image:
Java:
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

Mitglied
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:
Java:
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

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

müsste eigentlich funktionieren.
 

eolith421

Mitglied
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:

Java:
@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);
			}
		}
	}
}
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben