• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

Woher werden Daten bei der Java Programmierung gezogen?

Pettsy

Gast
Hallo,

ich bin neu hier und habe gleich eine etwas dringliche Frage.

Ich habe dieses Semester angefangen mit Java zu programmieren und habe jetzt ein riesen Problem.
Unser Prof hat einen Code geschrieben, mit dem Bilder aus einem Verzeichnis gezogen werden können und dann mit Hilfe von Java Codes verändert werden können, z.B. eine Hälfte der Pixel schwarz, o.ä.

Jetzt habe ich das Problem, dass der Code das Bild nicht findet. Ich habe meinen Code mit BlueJ geschrieben und wir haben schon versucht, das Bild im Projekt-Verzeichnis zu speichern, oder aber auch in dem Ordner aus dem heraus BlueJ gestartet wird. In beiden Fällen wird das Bild nicht gefunden.

Hättet ihr evlt eine Idee für mich? Es wäre sehr wichtig, weil ich die Aufgabe nächste Woche schon wieder abgeben muss...

Mein Prof kann mir leider auch nicht helfen, weil er sich mit Mac überhaupt nicht auskennt.

Danke schonmal im vorraus.

LG
Hannah
 

ChrisDD

Gloster
Registriert
21.02.04
Beiträge
64
Das Beste wäre, mal den Quellcode zu Posten.

Gruß
Chris
 

Dadelu

Reinette Coulon
Registriert
06.07.05
Beiträge
939
Wie schon gesagt wurde, Code posten, dann schauen wir mal weiter ;)
 

Pettsy

Gast
import java.awt.Graphics;

import java.awt.Image;

import java.awt.MediaTracker;

import java.awt.Toolkit;

import java.awt.event.WindowEvent;

import java.awt.image.BufferedImage;

import java.awt.image.PixelGrabber;

import java.awt.*;

import javax.swing.*;



/**

* Die Klasse Picture stellt Methoden zur Verf¸gung, um eine .jpg-Datei in einem Java-Programm von der

* Festplatte zu laden und am Bildschirm anzuzeigen. Die Bildinformationen werden in einem 2-dimensionalen int-Array

* gespeichert und kˆnnen manipuliert werden.

*

*

* @author (Dirk Eisenbiegler)

* @version (1.0)

* @version (1.1) W. Taube: Titelleiste ber¸cksichtig, show(p, title) zus‰tzlich, paint() statt update(), Frame statt JFrame

*/

class Picture extends Frame {



private Image cImage;

private static int menueheigth;

private static int borderwidth;



public Picture(Image image) {

cImage = image;

pack(); // erst nach pack() existieren gueltige Insets

Insets insets = getInsets();

borderwidth= insets.left;

menueheigth = insets.top;

}



public void paint(Graphics g) {

g.drawImage(cImage, 0+borderwidth, 0+menueheigth, this);

}

/**

* zeigt das in pixels ¸bergebene Bild am Bildschirm an

* @param pixels 2-dimensionales int-Array - enth‰lt die Bildinformationen im RGB-Format

* @param name wird in der Titelzeile angezeigt

*/

static void show(int[][] pixels, String name) {

int width = pixels.length;

int height = pixels[0].length;

BufferedImage image =

new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);

for (int x = 0; x < width; x++)

for (int y = 0; y < height; y++)

image.setRGB(x, y, pixels[x][y]);

Picture p = new Picture(image);

p.setSize(width+(2*borderwidth), height+menueheigth+borderwidth);

p.setVisible(true);

p.setTitle(name);

p.repaint();

p.addWindowListener(new java.awt.event.WindowAdapter() {

public void windowClosing(WindowEvent e) {

System.exit(0);

}

public void windowStateChanged(WindowEvent e) {

e.getWindow().repaint();

}

public void windowActivated(WindowEvent e) {

e.getWindow().repaint();

}

});

}

/**

* zeigt das in pixels ¸bergebene Bild am Bildschirm an - Variante ohne Parameter name

* @param pixels 2-dimensionales int-Array - enth‰lt die Bildinformationen im RGB-Format

*/

static void show(int[][] pixels) {

show(pixels, "Picture");

}

/**

* laedt die mit filename uebergebene Datei in ein 2-dimensionales int-Array

* @param filename Dateiname der .jpg-Datei als String

* @return liefert einen Verweis auf einen 2-dimensionales int-Array mit den Bildinformationen zur¸ck.

*/

public static int[][] load(String filename) {

Image image = Toolkit.getDefaultToolkit().getImage(filename);

Picture picture = new Picture(image);

picture.setVisible(false);

MediaTracker mediatracker = new MediaTracker(picture);

picture.pack();

try {

mediatracker.addImage(image, 0);

mediatracker.waitForAll();

} catch (Exception x) {

}

int width = image.getWidth(picture);

int height = image.getHeight(picture);

picture.dispose();

int p[] = new int[width * height];

try {

PixelGrabber pixelgrabber =

new PixelGrabber(image, 0, 0, width, height, p, 0, width);

pixelgrabber.grabPixels();

} catch (InterruptedException ie) {

ie.printStackTrace();

}

int pixels[][] = new int[width][height];

for (int x = 0; x < width; x++)

for (int y = 0; y < height; y++)

pixels[x][y] = p[x + width * y];

return pixels;

}

}

Das ist der Code für den Befehl Picture.load, den hat unser Prof uns vorgegeben. bei dem markierten kommt die fehlermeldung

class Bilder {

public static void main(String[ ] args) {



int [ ] [ ] p= Picture.load("Kyara1.jpg");



Picture.show(p);

}

}

das ist mein code, mit dem ich das bild dann laden wollte. der ist laut bluej auch so ok.

danke dass ihr euch das anschauen wollt.

LG
Hannah
 

Trapper

Meraner
Registriert
12.05.05
Beiträge
231
Du könntest mal versuchen das Bild mit einem absoluten Dateinamen zu referenzieren. Also wenn beispielsweise das Bild in deinem Home-Verzeichnis liegt, dann
Code:
int [ ] [ ] p= Picture.load("/Users/Pettsy/Kyara1.jpg");
Das Beispiel nimmt an, dass dein Kurz-Name am System "Pettsy" lautet.