PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C++ Builder: TImage als Parameter


aths
2003-11-10, 09:30:44
Bei einem Programm lese ich aus einem TImage eine Palette aus (indem die Farben als Paletten-Farben genommen werden.)

"pal" ist die Paletten-Klasse. Folgender Code geht, wenn pal1 ein TImage ist:

pal.set(i,Form1->pal1->Canvas->Pixels[0][i]);


Das hätte ich jetzt gerne flexibel, also etwa so:


void readpalette(TImage a) {
for (int i=0;i<256;++i) {
pal.set(i,a->Canvas->Pixels[0][i]);
}

So ist es aber nicht kompilierbar. Wie ist's richtig?

Xmas
2003-11-10, 11:58:14
Original geschrieben von aths
"pal" ist die Paletten-Klasse. Folgender Code geht, wenn pal1 ein TImage ist:
Korrekte Formulierungen helfen, Fehler zu vermeiden:
"pal" ist die Paletten-Instanz. Folgender Code geht, wenn pal1 ein Pointer auf TImage ist.


Das hätte ich jetzt gerne flexibel, also etwa so:


void readpalette(TImage a) {
for (int i=0;i<256;++i) {
pal.set(i,a->Canvas->Pixels[0][i]);
}

So ist es aber nicht kompilierbar. Wie ist's richtig?
Den -Tag gibts nicht nur zum Spaß ;)

Das kann nicht funktionieren, weil der -> Operator auf der linken Seite einen Pointer erwartet, kein Objekt. a ist aber ein TImage, kein Pointer auf TImage. In diesem Fall musst du den . Operator verwenden. Außerdem solltest du komplexe Objekte niemals per Value übergeben, sondern per Reference.

[code]
void readpalette(TImage& a) {
for(int i = 0; i < 256; ++i) {
pal.set(i, a.Canvas->Pixels[0][i]);
}
}