Java-Code, Array?
Kann jemand mir die Methoden, heller, spot, weichzeichnen, horizontalspieglung, punktSpieglung 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.
*/
class SWBild
{
/**
* Dieses Bild weichzeichnen.
*/
public void weichzeichnen()
{
for (int y = 0; y < _hoehe; y++)
{
for (int x = 0; x < _breite; x++)
{
int _nebenBildpunkte = 0;
int anzahlPiksel=0;
_nebenBildpunkte += weichzeichnen(y+1, x);
_nebenBildpunkte += weichzeichnen(y+1, x+1);
_nebenBildpunkte += weichzeichnen(y+1, x-1);
_nebenBildpunkte += weichzeichnen(y, x+1);
_nebenBildpunkte += weichzeichnen(y, x-1);
_nebenBildpunkte += weichzeichnen(y-1, x+1);
_nebenBildpunkte += weichzeichnen(y-1, x);
_nebenBildpunkte += weichzeichnen(y-1, x-1);
_nebenBildpunkte = _nebenBildpunkte/anzahlPiksel;
_bilddaten[y][x] = (short) _nebenBildpunkte;
}
}
zeichneBild();
}
public int weichzeichnen(int y, int x) {
if (x >= 0 && x < _breite && y >= 0 && y < _hoehe) {
anzahlPiksel++;
return _bilddaten[y][x];
}
else
{
return 0;
}
}
/**
* Erzeuge bei diesem Bild einen Spot mit Radius r, Mittelpunkt x0,y0 und Beleuchtungsintensitaet i. Ausserhalb von r nimmt die Ausleuchtung linear ab.
* Wie im wirklichen Leben...
* @param xo
* x-Koordinate des Mittelpunktes
* @param yo
* y-Koordinate des Mittelpunktes
* @param r
* Radius
* @param i
* Beleuchtungsintesitaet
*/
public void spot(int x0, int y0, int r, short i)
{
short i0 = 0;
for (int k = _breite/2; k >= r; k--) {
for (int y=0; y<_hoehe; y++){
for (int x=0; x<_breite;x++){
if(((x-x0)*(x-x0))+((y-y0)*(y-y0))<=k*k){
if (_bilddaten[y][x] + i0 > 255) {
_bilddaten[y][x] = 255;
} else if (_bilddaten[y][x] + i0 < 0) {
_bilddaten[y][x] = 0;
} else {
_bilddaten[y][x] = (short) (_bilddaten[y][x] + i0);
}
}
if (i > i0){
i0++;
}
}
}
}
zeichneBild();
}
1 Antwort
Die Methode "heller" fügt dem Wert jedes Bildpunkts einen bestimmten Betrag hinzu. Dies wird im Code wie folgt implementiert:
for (int y=0; y<_hoehe; y++){
for (int x=0; x<_breite; x++){
if (_bilddaten[y][x] + betrag > 255) {
_bilddaten[y][x] = 255;
} else if (_bilddaten[y][x] + betrag < 0) {
_bilddaten[y][x] = 0;
} else {
_bilddaten[y][x] = (short) (_bilddaten[y][x] + betrag);
}
}
}
Die Methode "spot" erzeugt einen Spot-Effekt auf dem Bild, indem sie eine Beleuchtungsintensität in einem bestimmten Radius um einen Mittelpunkt herum anwendet. Die Ausleuchtung nimmt außerhalb dieses Radius linear ab. Dies wird im Code wie folgt implementiert:
short i0 = 0;
for (int k = _breite/2; k >= r; k--) {
for (int y=0; y<_hoehe; y++){
for (int x=0; x<_breite;x++){
if(((x-x0)*(x-x0))+((y-y0)*(y-y0))<=k*k){
if (_bilddaten[y][x] + i0 > 255) {
_bilddaten[y][x] = 255;
} else if (_bilddaten[y][x] + i0 < 0) {
_bilddaten[y][x] = 0;
} else {
_bilddaten[y][x] = (short) (_bilddaten[y][x] + i0);
}
}
if (i > i0){
i0++;
}
}
}
}
Und so weiter und so fort...:
Die Methode "weichzeichnen" dient dazu, das Bild zu glätten, indem sie den Durchschnittswert der benachbarten Bildpunkte jedes Bildpunkts berechnet und diesen Wert als neuen Wert für den Bildpunkt verwendet.
Die Methode "horizontalspiegelung" spiegelt das Bild horizontal, indem sie die Bildpunkte auf der linken Seite des Bildes mit denen auf der rechten Seite vertauscht.
Die Methode "punktspiegelung" spiegelt das Bild um einen bestimmten Punkt herum, indem sie die Entfernungen von allen Bildpunkten zu diesem Punkt berechnet und die Bildpunkte an den entsprechenden symmetrischen Positionen des Bildes platziert.
Dann verstehst du aber die Grundlagen des Programmierens nicht... Da solltest du nicht mit soetwas anfangen sondern mit einfacheren Sachen.
Ich weiß schon, was jede Methode macht. Ich verstehe den Code nicht, welche Zeile was sagt und warum?