Swap Color
-
Hey Leute, ich bin grad dabei ein Malprogramm zu schreiben und hab eine Funktion eingebaut, die da heißt swap colors, sowas hat Paint nicht
Diese funktion sieht so aus:
void __fastcall swapcolor(TColor *Colorweg, TColor *Colortausch, TImage *Image) { int x; int y; for (y=0;y<Image->Height;++y) { for (x=0;x<Image->Width;++x) { if (Image->Canvas->Pixels[x][y]==Colorweg) { Image->Canvas->Pixels[x][y]=Colortausch; } } } }
Es funktioniert zwar, aber es dauert ewig, bis er fertig ist, also beim Bild von 400*300 dauert*s 3 Sekunden, aber bei 600*800, naja, fast 15 Sekunden. Wie krieg ich des hin, dass es schneller geht?
Edit:
Meint ihr, es geht schneller mit
void __fastcall swapcolor(TColor *Colorweg, TColor *Colortausch, TImage *Image) { int x; int y; Image1->Canvas->Brush->Color=Colortausch; Image1->Canvas->Brush->Style=bsSolid; for (y=0;y<Image->Height;++y) { for (x=0;x<Image->Width;++x) { if (Image->Canvas->Pixels[x][y]==Colorweg) { Image->Canvas->FloodFill(Colorweg, x, y); } } } }
[ Dieser Beitrag wurde am 26.06.2003 um 14:28 Uhr von Spieleprogrammierer editiert. ]
-
Nunja... dass es eine Weile dauert bis er 480000x durch deine for/if Anweisung rennt ist klar.
Teste es doch mal aus ob es schneller geht... hast es doch auf deinem Rechner und somit doch einen praktischen Ansatz
-
Naja, aber wie machen es denn die Profis? Ic hmeine, es dauert trotzdem zuu lnge, ich will das ganze in 3 Sekunden haben.
-
TImage::Scanline ist bis zu 30mal schneller als TImage::Canvas::Pixels...
-junix
-
wenns das geben tät wärst der Held aber ... me hat BcB 6 enterprise da gibts das net .. @scanline
-
junix meinte TBitmap::ScanLine.
-
Hobbala vertan (o: danke Jansen (o:
-junix
-
hu ma anschauen
-
und wie rufe ich ScanLine auf? So hier?
if (Image1->Canvas->Bitmap->ScanLine[y][x]==(TColor)0x00ff0000)
...
-
TImage::Picture::Bitmap::ScanLine
-junix
-
Hmm, irgendwiekomm ich in der Hilfe nicht zurecht, also Image1->Picture->Bitmap->ScanLine[Y];
Aber wie krieg ich jetzt die Farbe von jeden einzelnen Pixel in dieser "Höhe"?
Entweder bin ich zu blöd mit der Hilfe vom BCB3 umzugehen, oder das Beispiel dort ist doof.
-
Wieviele Beiträge liefert die Suchfunktion zum Thema ScanLine und in wievielen davon gibt es Code-Beispiele?
-
Hi,
hab was für dich gefunden, wenn dir 20ms für ein 200x200x24bit Bild auf einem P166/64MB reichen!MFG
Alexander Sulfrian
-
Klingt gut, aber so richtig durchsehen tu ich da leider auch nicht.
-
man(n)! benutzt doch einfach mal die suchfunktion. es gab hier schon unzählige beispiele für bildverarbeitung und scanline!
-
Ach ne. Ich hab ja gesucht und gefunden, aber trotzdem seh ich da net so richtig durch. Ich will nur wissen, wie ich bei Scanline an Pixel 25 in Zeile 3 komme, so zum Bispiel.
-
Also wie du an Zeile 3 kommst dürfte ja wohl klar sein? Der Rest (Pixel
hängt vom Pixelformat ab...
-junix
-
ich will nur ne Bitmap-Datei mit der Größe 800 * 600 "scannen".
-
...scöhn, danke für die info... mir drängt sich die Frage auf: "...und was wollte er uns damit sagen?"
-junix
-
Was sagtest du doch gleich zu offtopic? -Entweder antworten, wenn du keine Antwort weißt, dann lass es ganz bleiben.