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();
}