Aus Bildern teile herausschneiden

Status
Nicht offen für weitere Antworten.

mdoemli

Bekanntes Mitglied
Hallo zusammen,

kann mir vielleicht eine Klasse nennen mit welcher ich aus einem Bild bestimmte abschnitte herausschneiden kann und neu anzeigen kann.

Vielen Dank,

Max
 
Guten Morgen,

möchte mich nochmal melden, da ich schon so weit nach hinten gerutscht bin.
Kann mir keiner einen Tipp geben wie ich es machen kann, nur einen bestimmten Pixel Bereich von einem Bild anzeigen lassen kann?

Gruß,

mdoemli
 
Guck dir die Graphics.drawImage-Befehle genauer an.
Guck dir BufferedImage.getSubimage an.

-> Lies die API :roll: :wink:
 
Mh, du erstellst dir ein BufferedImage und schreibst dann einen gewissen Teilschnitt wieder reinpinseln!!

Nur musst du glaube ich die Pixel halt reinhaun....
 
Hallo zusammen,

eigentlich müsste es doch reichen wenn ich mit der Methode
drawImage(Image img, int x, int y, int width, int height, ImageObserver observer)
arbeite.

Also
Code:
public void init(){
	  	try {	
	  			image = getImage(new URL(getDocumentBase(), "http://miramonte.homelinux.net/portal/pic/muc2.jpg"));
	  			
	  	} catch(Exception ioe) {
	  			System.out.println("Fehler beim erstellen des Bild-Pfades");
	  		}
	  	}
	
	 public void paint (Graphics g) {
	 	
	 	g.drawImage( image, 2400, 1667, 3174, 695, this );
	 	
		
	 }

Das Problem ist jetzt wird garnichts mehr angezeigt.
Das mit den Koordinaten hab ich so verstanden.
x und y => Punkt links unten
height und weidth => Vom Punkt aus wieviel noch gezeichnet werden soll

Gruß,

mdoemli
 
Draws as much of the specified image as has already been scaled to fit inside the specified rectangle.

Nein nicht ganz...

x und y bestimmen wo das Bild gezeichnet werden soll.
height und width geben an wie groß das bild sein soll. Also es wird auf die große skaliert.
 
Paint ist für ein Applet.
Ok verstanden mit drawImage funktioniert das nicht.
Also doch getSubImage.

Hab ihr da ein kleines Beispiel?
 
Dir würde eher die Methode:
Code:
drawImage(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, ImageObserver observer)
helfen.

So zu benutzen:

dx1, dy1, dx2, dy2 -> geben an wie groß das ausgeschnittene Stück ANGEZEIGT werden soll (Wobei dx1, dy1 der links obere und dx2, dy2 der rechts untere punkt sind)

sx1, sy1, sx2, sy2 - > bestimmen den Ausschnit aus dem Bild der angezeigt werden soll (gleiches system wie oben)

EDIT2:
x = 100 bedeutet 100 pixel von links (entlang der x-Achse, wie bei der Mathematik)
y = 100 bedeutet 100 pixel von oben (in die mathematisch falsche Richtung der y-Achse)

EDIT:
Bsp.: Bild mit 100x100. Es soll die linke untere Ecke von 50x50 pixel angezeigt werden. Die soll aber so groß wie das Bild aussehen.
Code:
 g.drawImage( image, 0,0, 100, 100, 0, 50, 50, 100,  this );
Es wird also die linke untere Ecke genommen (50x50) und auf 100x100 skaliert.
 
Dreezard erstmal Danke,

funktioniert super.
Jetzt zeichnet er halt die Punkte nicht mehr auf die Karte, das liegt aber wahrscheinlich daran das die Pixel Koordinaten ja nicht mehr mit dem alten Bild übereinstimmen oder?

Ist jetzt schon so, das die Koordinaten der linken oberen Ecke des neuen Bildes 0, 0 sind?

Gruß,

mdoemli
 
1.: Wie genau meinst du die Frage? du kennst die dx1, dy1, dx2, dy2 Wehrte verändern und so das ausgeschnittene Bild an eine bestimmte Position setzten.

2.: Das Bild an sich hat IMHO keine eigenen Koordinaten, aber das objekt auf das du es zeichnest. Und die Wehrte sind unverändert. Also links oben 0,0 wie du schon richtig sagtest
 
Also hab jetzt alles hinbekommen,

nochmals Danke an alle die geholfen haben.
Vielleich braucht jab mal einer so was ähnliches, also hier der Code:

Code:
 public void init(){
	  	try {	
	  			image = getImage(new URL(getDocumentBase(), "http://miramonte.homelinux.net/portal/pic/muc2.jpg"));
	  			
	  	} catch(Exception ioe) {
	  			System.out.println("Fehler beim erstellen des Bild-Pfades");
	  		}
	  	}
	
	 public void paint (Graphics g) {
	 	getImageSize();
	
	 	int dx2  = max_x_int - min_x_int;
		int dy2  = max_y_int - min_y_int;
		
	 	g.drawImage( image, 0, 0, dx2+2*frame, dy2+2*frame, min_x_int-frame, min_y_int-frame, max_x_int+frame, max_y_int+frame, this  );
		readKoord(g, dx2, dy2);
		
	 }
	 public void getImageSize(){
	 	String getParam		=	"([^;]+)";
	 	try { 
			
				 URL url = new URL(getCodeBase(), "http://miramonte.homelinux.net/portal/applets/trackingtool.txt");
				 InputStream in = url.openStream();
				 BufferedReader read = new BufferedReader(new InputStreamReader(in));
			
			double min_x = 1000.0, max_x = 0.0, min_y = 1000.0, max_y = 0.0;
			String min_x_tmp = "";
			String min_y_tmp = "";
			String max_x_tmp = "";
			String max_y_tmp = "";
			double x_tmp_double	 = 0.0;
			double y_tmp_double	 = 0.0;
			String text = "";
			double tmp = 0;
			int index   = 0;
			
			Pattern regex = Pattern.compile(getParam);
		
			
				while((text = read.readLine()) != null){
			
				Matcher match = regex.matcher(text);
				int counter = 0;
				
					while(match.find()){
						
						if(counter == 0){
							counter++;
							x_tmp_string = match.group();
							x_tmp_double = new Double(x_tmp_string).doubleValue();
							
								if(x_tmp_double < min_x) {
									if(getXPixel(x_tmp_double) < 0){
										//nichts
									}else{
										min_x = x_tmp_double;
									}
								}
								if(x_tmp_double > max_x) {
									if(getXPixel(x_tmp_double) < 0){
										//nichts
									}else{
										max_x = x_tmp_double;
									}
								}

						}else if(counter == 1){
							counter++;
							y_tmp_string = match.group();					
							y_tmp_double = new Double(y_tmp_string).doubleValue();
							
							
								
								if(y_tmp_double > max_y) {
									if(getYPixel(y_tmp_double) < 0){
										//nichts
									}else{
										max_y = y_tmp_double;
									}
								}
								if(y_tmp_double < min_y) {
									if(getYPixel(y_tmp_double) < 0){
										//nichts
									}else{
										min_y = y_tmp_double;
									}
									
								}						
						}
					}
				}
				int tmp_y = 0;
				min_x_int = getXPixel(min_x);
				max_x_int = getXPixel(max_x);
				min_y_int = getYPixel(min_y);
				max_y_int = getYPixel(max_y);
				if(min_y_int > max_y_int){
					tmp_y = min_y_int;
					min_y_int = max_y_int;
					max_y_int = tmp_y;
				}

			} catch (Exception e) {
				System.out.println("Fehler beim lesen der Koordinaten aus LogFile"+e);
			}	
	 }

Gruß,

mdoemli
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben