Java-Code? Array?
Wie wird das Array verwendet? Was befindet sich in dem Array? kann jemand mir den Code und die Methode dunkler erklären?
* SWBild ist eine Klasse, die Graustufenbilder repraesentiert und
* manipuliert. Die Implementierung erfolgt durch ein einfaches
* Bildformat: Die Bildpunkte werden in einem zweidimensionalen
* Array von 'short'-Werten gehalten. Jeder Feldeintrag kann einen
* Wert zwischen 0 und 255 annehmen. Andere Werte sind unzulaessig.
* Der Wertebereich [0..255] repraesentiert den Graustufenbereich:
* 0 fuer Schwarz, 255 fuer Weiss und dazwischenliegende Werte fuer
* die Grauabstufungen.
*
* Beispielmethode 'dunkler': Ein geladenes Bild kann um
* ein gegebenes 'delta' abgedunkelt werden.
class SWBild
{
// die Bilddaten dieses Bildes
private short[][] _bilddaten;
// die Breite dieses Bildes
private int _breite;
// die Hoehe dieses Bildes
private int _hoehe;
// Leinwand zur Anzeige
private Leinwand _leinwand;
/**
* Initialisiert ein Bild mit einer Bilddatei. Der Benutzer kann interaktiv mit
* Hilfe eines Dateidialogs die zu ladende Datei auswaehlen.
*/
public SWBild()
{
_bilddaten = BildEinleser.liesBilddaten();
if (_bilddaten != null)
{
aktualisiereBildgroesse(_bilddaten);
erzeugeLeinwand();
}
}
/**
* Initialisiert ein Bild mit einer Bilddatei. Der Dateiname kann als absoluter
* oder relativer Pfad uebergeben werden.
*
* @param bilddateiName
* der Name der Bilddatei
*/
public SWBild(String bilddateiName)
{
_bilddaten = BildEinleser.liesBilddaten(bilddateiName);
aktualisiereBildgroesse(_bilddaten);
erzeugeLeinwand();
}
/**
* Dieses Bild um einen Wert abdunkeln.
*
* @param delta
* Wert der Abdunkelung. Es wird mit dem Betrag von delta gerechnet,
* deshalb darf der Parameter sowohl positiv als auch negativ sein.
*/
public void dunkler(int delta)
{
if (delta < 0)
{
delta = -delta;
}
/**
* Durch alle Bytes des Bildes gehen und jeden Wert dekrementieren
*/
for (int y = 0; y < _hoehe; y++)
{
for (int x = 0; x < _breite; x++)
{
if ((_bilddaten[y][x] - delta) > 0) // Wert darf 0 nicht unterschreiten
{
_bilddaten[y][x] = (short) (_bilddaten[y][x] - delta);
}
else
{
_bilddaten[y][x] = 0;
}
}
}
// Neuzeichnen der Bildleinwand, basierend auf den Werten in _bilddaten:
zeichneBild();
}
1 Antwort
Das Array verwendest du indem du es mit Informationen über das Bild füllst. Bei einem 3x3 Bild, das ein Punkt in der Mitte hat würde das Array so aussehen:
{255, 255, 255},
{255, 0, 255},
{255, 255, 255}
Jedes Schwarzweiß-Bild hat an Punkt X|Y eine gewisse Graustufe von 0-255 (Schwarz-Weiß).
du kannst her gehen und beispielsweise sagen:
_bilddaten[400][150] = 255;
Das geht natürlich viel schlauer, als jeden Punkt einzeln zu definieren. Da kommst du sicher drauf.
Wie kommen Sie auf diese Zahlen? {255, 255, 255},{255, 0, 255}, {255, 255, 255}
Die Methode Dunkler habe ich immer noch nicht verstanden.
Können jede Zeile genau erklären, was passiert?
Von oben nach unten:
Zunächst wird in der If-Abgfrage die Minuswerte abgefangen, da die Methode nicht den Fall "heller" betrachten möchte.
Anschließend beginnt eine verschachtelte Schleife, zunächst durch alle Zeilen, und in jeder Zeile durch alle Spalten, um jeden Punkt des 2D-Arrays zu erreichen.
Die If-Abfrage innerhalb der verschachtelte For-Schleife prüft ab, ob der Wert des Bildpunkts größer 0 ist und falls ja, soll dieser um den Wert Delta verringert werden, aber 0 nicht unterschreiten.
Am ende wird mit zeichneBild() das neue Bild ausgegeben.
offenbar hat sich die Frage in der zwischenzeit geändert.
Meine neue Antwort ist folgend:
Bei der Instanziierung von SWBild wird vom Bildleser die Bilddaten in Form von hellen und dunkln Punkten eingelesen.
Das könnte bei einem 3x3 Bild etwa so aussehen:{255, 255, 255},{255, 0, 255}, {255, 255, 255}
Jedes Schwarzweiß-Bild hat an Punkt X|Y eine gewisse Graustufe von 0-255 (Schwarz-Weiß). Rufst du die Methode dunkler() auf , so gibst du ihm ein Parameter mit, also einen Wert, mit der die Methode Stück für Stück alle Bildpunkte dunkler macht.
Der Delta ist zb 10. Alle Punkte des Bilds werden um 10 verringert. Ist 0 bereits erreicht, so wird der Punkt nicht dunkler (Weil es keinen Sinn macht). Am Ende wird das neue Bild angezeigt.
Hat das dir weitergeholfen?