Interpolation eines Bildes

Status
Nicht offen für weitere Antworten.

Sued_Faust

Bekanntes Mitglied
Moin Leute,

ich habe die Aufgabe ein Bild (als JPEG), in java zu importieren und dann zu interpolieren und zwar von der Farbe schwarz ausgehend soll das Bild wieder sichtbar werden.
Das ganze soll dann aber so aussehen das ein Balken, z.B. ein Rectangle2D von links nach rechts über den Bildschirm wandert und dabei die interpolation hinter sich herzieht. Das soll dann den effekt haben das der Balken sozusagen ein SChmiereffekt hinter sich herzieht. D.h. also das die Interpolation nicht aufeinmal für das ganze Bilde berechnet werden soll, sondern immer etwas hinter dem Balken der sich von rechts nach links bewegt.

Ich habe es bis jetzt nur hinbekommen das ganze Bild zu interpolieren wird. Ich weiß nun nicht wie ich es hinbekomme das immer nur ein stück interpoliert wird und diese Interpolation dann auch noch einem Balken "folgt".

hier schon mal mein Quellcode:

Code:
package Online;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Random;

import javax.imageio.ImageIO;
import javax.swing.JFrame;

public class Interpolation extends JFrame{
		
	public Graphics2D g2d;
	public Graphics2D g2d_1;
	
	private BufferedImage bild_Original;
	private BufferedImage bild_Schwarz;
	private BufferedImage bild_Temp;

	private int[] rechteck1 = new int[5];
	private int[] rechteck2 = new int[5];
	
	private int imageWidth; 
	private int imageHeight;

	public Interpolation(int width, int height) throws IOException {

		bild_Original = ImageIO.read(new File("Lenzburg.jpg"));
		bild_Schwarz = new BufferedImage(800,600,BufferedImage.TYPE_INT_RGB);
		bild_Temp = ImageIO.read(new File("Lenzburg.jpg"));

		this.setSize(new Dimension(width, height));
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
		this.setResizable(false);
		this.setTitle("Interpolation");
	
		doInitialistion();		
	}
	
	public void doInitialistion(){	
		//Rechteck-Koordinaten
		rechteck1[1] = 2; 
		rechteck1[2] = 0;
		rechteck1[3] = 50;
		rechteck1[4] = 600;
		
		//Rechteck-Koordinaten
		rechteck2[1] = 799;
		rechteck2[2] = 0;
		rechteck2[3] = 50;
		rechteck2[4] = 599;
		
		imageWidth = bild_Original.getWidth();
		imageHeight = bild_Original.getHeight(); 
	}
	
	public void paint(Graphics g){
		update(g);
	}
	
	public void update(Graphics g){			
		g2d = (Graphics2D) g;
		
		g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
			
		//g2d.drawImage(bild_Original, 0, 0, this);

		Rectangle2D.Double rect = new Rectangle2D.Double(rechteck1[1],rechteck1[2],rechteck1[3],rechteck1[4]);
		
		g2d.fill(rect);
		
		double x[] = new double[rechteck1.length];
		
		//Schrittanzahl
		int steps = 60;
		double stepsdouble = steps;
		
		Color color_Black;
		Color color_Original;
		Color color_temp;
		
		for (int k = 1; k < steps; k++) {
			double alpha = k/stepsdouble;
			
			for (int i = 1; i < 800; i++)
			{
				for (int j = 1; j < 600; j++)
				{
					color_Original = new Color(bild_Original.getRGB(i,j));
					color_Black = new Color(bild_Schwarz.getRGB(i, j));
					
					int rot  = (int) ((1-alpha) * color_Black.getRed()   + alpha * color_Original.getRed());
					int grün = (int) ((1-alpha) * color_Black.getGreen() + alpha * color_Original.getGreen());
					int blau = (int) ((1-alpha) * color_Black.getBlue()  + alpha * color_Original.getBlue());
					
					color_temp = new Color(rot,grün,blau);
					bild_Temp.setRGB(i,j,color_temp.getRGB());
				}	
			}
			g2d.drawImage(bild_Temp, 0, 0, this);

		}
	}

	public static void main(String[] args) throws IOException {
		new Interpolation(800,600);
	}

}

Ich hoffe das mir da vieleicht jemand auf die Sprünge helfen kann :).

gruß

Patrick
 
S

SlaterB

Gast
nettes Programm,
zur Umsetzung deines Problems musst du den alpha-Faktor von der Position abhängig machen,
ein einfacher Umbau zu

Code:
		for (int k = 1; k < steps; k++) {

			for (int i = 1; i < imageWidth; i++) {
				double alpha = (k-i) / stepsdouble;
				alpha = Math.max(0, alpha);
an der Doppelschleife führt z.B. schon zu einem interessanten Effekt,
kannst von da aus weiterdenken

edit:
generell schöner: in einem JPanel zeichnen, paintComponent() überschreiben,
keine Schleife während des Zeichnens sondern eher separat einen Thread laufen lassen, der alle x ms repaint() aufruft
 

0x7F800000

Top Contributor
zum einen ist nicht ganz einleuchtend, was du da meinst, zum anderen sind magic numbers ein sehr hässlicher antipattern: mit einem 400x300px bild hat dein programm bei mir nur noch exceptions geworfen, weil du in deinen code irgendwelche zahlen wie "800" und "600" hard reingecoded hast... :noe:
 

Sued_Faust

Bekanntes Mitglied
@SlaterB

Danke das ist schon mal ne Idee, ich habs einfach mal ausprobiert und vom rechten Rand aus fängt es auch schon wie gewünscht an. Bei mir kommt er aber nicht weiter als vieleicht 1/10 des bildes. Zudem soll auch der Rechte teil des Bildes zusehen sein es soll ja ein balken rüberfahren der vieleicht ne bereite von 50 px hat.

@0x7F800000

Sry das es noch paar macken gibt, aber ich muss mich bisl um gröbere dinge kümmern und hatte gehoft das ihr das erkennt, dass das Bild diese größe habne muss.

gruß
 
S

SlaterB

Gast
wie gesagt, weiterdenken darfst du schon,

wenn du 60 Steps hast und das Image 600 Pixel breit ist, dann muss sich der Balken mit einer Geschwindigkeit von 10 bewegen,
ein Balken bedeutet vielleicht, dass dort alpha 0 oder 1 ist, je nach Art der Berechnung, dann muss er nicht nur links abfallen bzw. steigen, sondern auch rechts,

hier noch ein Beispiel:
double alpha = Math.abs((i/5)-k) / stepsdouble;
alpha = Math.max(0, alpha);
alpha = Math.min(1, alpha);

aber da musst du nun wirklich selber ausprobieren, rechnen usw
 

0x7F800000

Top Contributor
Sry das es noch paar macken gibt, aber ich muss mich bisl um gröbere dinge kümmern und hatte gehoft das ihr das erkennt, dass das Bild diese größe habne muss.

Es geht doch nicht darum wer da was erkennt, sondern darum dass du am ende aus deinem code an 50 Stellen irgendwelche Zahlen rauskratzen musst, und wenn du dich dabei einmal verrechnest oder vertippst, läuft erstmal wieder nichts mehr. Tust dir dadurch selbst keinen Gefallen. Aber gut, jetzt ist's egal, merk's einfach für später...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Interpolation von Punkten Spiele- und Multimedia-Programmierung 2
N Seltsame Exception bei Code eines Spiele-Tutorials Spiele- und Multimedia-Programmierung 6
R Ideen für die Backend-Entwicklung eines Games gesucht Spiele- und Multimedia-Programmierung 8
A Programmieren eines Memorys mit Java (in Eclipse) Spiele- und Multimedia-Programmierung 5
T Position eines Image verändern mithilfe eines Timers Spiele- und Multimedia-Programmierung 6
E Programmierung eines 2.5D Point&Click Adventures ohne Spieleengine machbar? Spiele- und Multimedia-Programmierung 14
K Click innerhalb eines 45° gekippten Rechtecks Spiele- und Multimedia-Programmierung 9
J LibGdx_3D: Klamotten eines Charakters modifizieren Spiele- und Multimedia-Programmierung 2
K Erstellen eines Fotoalbums mit Java Spiele- und Multimedia-Programmierung 8
R Fehler beim Laden eines 2D-Bildes Spiele- und Multimedia-Programmierung 3
L OpenGL TransformationMatrix eines Flugzeugs Spiele- und Multimedia-Programmierung 2
M Programmierung eines "Fantasy Rollenspiels" Spiele- und Multimedia-Programmierung 5
E Laufanimation eines Sprites Spiele- und Multimedia-Programmierung 6
Finalspace Entwicklung eines Jump & Run Spiels Video-Tutorial Spiele- und Multimedia-Programmierung 12
T Hintergrundmusik eines Spiels mit Hilfe von JLayer Spiele- und Multimedia-Programmierung 12
M Cylinder anhand eines Vektors ausrichten (Java3d) Spiele- und Multimedia-Programmierung 0
M bewegen eines Objektes Spiele- und Multimedia-Programmierung 2
U Hilfe bei Implementierung eines PointSounds in Java3D Spiele- und Multimedia-Programmierung 1
gamebreiti Index eines Elements einer ArrayList abfragen Spiele- und Multimedia-Programmierung 1
X "Rebuffen" - Messen der Zeit eines Timers Spiele- und Multimedia-Programmierung 3
S Design eines Schachspiels Spiele- und Multimedia-Programmierung 3
S Mausklicks innerhalb eines JFrames/SWTBrowser ohne richtige Maus simulieren Spiele- und Multimedia-Programmierung 6
F Programmierung eines Bots Spiele- und Multimedia-Programmierung 23
A Wann ist ein Punkt inerhalb eines Polygons? Spiele- und Multimedia-Programmierung 2
F LWJGL Problem mit Erstellen eines Objekts und der Kamera Spiele- und Multimedia-Programmierung 5
R Drehen eines Bildes relativ zur Mauszeigerposition Spiele- und Multimedia-Programmierung 2
M Pattern zur Auswahl eines Objektes anhand vieler Kriterien Spiele- und Multimedia-Programmierung 2
H Skalierung eines Polygons ohne das es verschoben wird Spiele- und Multimedia-Programmierung 3
R Triangulation eines komplexen Polygons Spiele- und Multimedia-Programmierung 4
L Lwjgl Darstellung eines Kreises im Raum Spiele- und Multimedia-Programmierung 3
M Pixel eines BufferedImage bearbeiten (Performance) Spiele- und Multimedia-Programmierung 23
G Rotieren eines Objekts (2D) Spiele- und Multimedia-Programmierung 8
F nur Ausschnitt eines Image zeichnen Spiele- und Multimedia-Programmierung 9
S Umfang eines Polygons erzeugen Spiele- und Multimedia-Programmierung 1
D Highscoreliste eines Applets funktioniert online nicht Spiele- und Multimedia-Programmierung 4
W CannotRealizeException (jmf) beim abspielen eines liedes Spiele- und Multimedia-Programmierung 3
F Meine Aufgabe: Client-Server am Beispiel einer Implementation eines Tic-Tac-Toe Netzwerkspieles Spiele- und Multimedia-Programmierung 7
D Koordinaten eines 2D Sprites Spiele- und Multimedia-Programmierung 2
B Teile eines Bildes laden - BitBlk und drawImage Spiele- und Multimedia-Programmierung 3
S Problem beim laden eines Bildes in einer Methode Spiele- und Multimedia-Programmierung 14
N Bildposition innerhalb eines anderen Bildes ermitteln Spiele- und Multimedia-Programmierung 2
G rotation eines würfels Spiele- und Multimedia-Programmierung 9
G Bewegung eines Grafikobjektes Spiele- und Multimedia-Programmierung 7
A Programmieren eines Bruchrechners Spiele- und Multimedia-Programmierung 3
H Decke zeichnen mit Hilfe eines Polygons Spiele- und Multimedia-Programmierung 2
J Rotieren eines 2D Images endet in Java heap space Error Spiele- und Multimedia-Programmierung 15
W Affine Transformation, Rotieren eines Objekts Spiele- und Multimedia-Programmierung 2
S fließende/bewegende Striche eines Auswahlrechtecks Spiele- und Multimedia-Programmierung 9
A Bounds eines gedrehten Objekts berechnen Spiele- und Multimedia-Programmierung 30
T Erstellen eines ausdruckbaren Formulars Spiele- und Multimedia-Programmierung 5
T Umsetzung eines 2D Jump and Runs Spiele- und Multimedia-Programmierung 7
T Brightness eines Bildes [DRINGEND] Spiele- und Multimedia-Programmierung 2
S Java3D - mehrere Instanzen eines Geometrieobjektes erzeugen Spiele- und Multimedia-Programmierung 3
ARadauer Grauwerte eines jpg ermitteln Spiele- und Multimedia-Programmierung 4
A Anzeigen eines Grapfen Spiele- und Multimedia-Programmierung 13
R Die korrekte Breite/Höhe eines Bildes wird nicht erkannt. Spiele- und Multimedia-Programmierung 2
S Problem bzgl. Umsetzung eines Rollenspiel Spiele- und Multimedia-Programmierung 6
M Ausschneiden eines Bereichs / Avatar Spiele- und Multimedia-Programmierung 2
G Ermitteln eines Punktes in einer anderen TransformGroup Spiele- und Multimedia-Programmierung 2
M Frage eines Anfängers Spiele- und Multimedia-Programmierung 3
DEvent [2D] Farbe bestimmten Pixels eines Bildes ändern Spiele- und Multimedia-Programmierung 3
V Wie berechnet man das Bild eines Schwarzen Loches in Java? Spiele- und Multimedia-Programmierung 10
G Breite eines Strings Spiele- und Multimedia-Programmierung 2
S Text an einer Seite eines Cubes Spiele- und Multimedia-Programmierung 7
F Image eines bestimmten Bereichs eines JPanels erstellen Spiele- und Multimedia-Programmierung 4
N Grafik als Hintergrund eines Rechtecks verwenden? Spiele- und Multimedia-Programmierung 4
N Rundenstrategiespiel - Problem beim Drehen eines Bildes Spiele- und Multimedia-Programmierung 18
F Brauche Hilfe bei Bewegung eines Rechtecks [Applet] Spiele- und Multimedia-Programmierung 5
T Java2D Spiel, beim Hinzufügen eines Bildes ruckelt das ganze Spiele- und Multimedia-Programmierung 3
F Position eines Objektes auslesen. Spiele- und Multimedia-Programmierung 7
W Rotation eines Objektes Spiele- und Multimedia-Programmierung 2
M Zerschneiden eines Bildes mit Wellenlinien? Spiele- und Multimedia-Programmierung 2
S Simulation in der Art eines Schachbrett Spiele- und Multimedia-Programmierung 2
A 2-Achsen Rotation eines Würfels Spiele- und Multimedia-Programmierung 4
L nicht sichtbare Kanten eines Würfels Spiele- und Multimedia-Programmierung 2
G java screenshots und erkennung des bildes Spiele- und Multimedia-Programmierung 13

Ähnliche Java Themen


Oben