Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
24.03.2002, 21:55
feigling



Also, ich habe ein kleines Problem, eher gesagt eine kleine Tuningfrage.
Erstmal hier die Programme und der Source.
Ohne das wird man meine Frage wahrscheinlich nicht verstehen =)

Programme: http://mitglied.lycos.de/feigling4u/Programme.zip

Source: http://mitglied.lycos.de/feigling4u/code.zip

Anmerkung: Die DirectX Timer kann man durch normale Timer ersetzen.
Hier war es nur einfacher, die Frameszahl rauszubekommen, da die DX Timer die gleich mit anzeigen können.

Und zwar wollte ich mir ein Programm machen, was bestimmte Bereiche eines vorher erstellten Bildes durch eine andere Farbe ersetzt.
Bei meinem Beispiel soll die blaue Farbe des Bildes durch eine andere ersetzten werden. Das geht auch ganz "gut", nur das Problem ist, dass es ganz schön langsam ist. Das liegt daran, dass ich das alles auf "Pixelbasis" mache, d.h. dass ich jeden Pixel erst überprüfe, ob der übermalt werden darf und dann den Pixel übermale.

Hier der Code dafür
Quellcode:
for x := 0 to image1.width -1 do
  begin
    for y := 0 to image1.height -1 do
    begin
      if can_draw[x,y] then                  // ob der Pixel blau ist
      begin
        image1.canvas.pixels[x,y] :=  clred;  //als Beispiel
      end;
    end;
  end;

Das Problem ist aber, dass das Bild 496x106 Pixel groß ist und da sollte es jedem klar sein, dass das sehr langsam ist. Wenn ich die blau nur durch eine Farbe ersetzt haben will (Programm 1, Test2), dann kann ich einfach floodfill nehmen (Programm1, Test3). Man erkennt, dass floodfill richtig rast, während das Pixel für Pixel hin"schleicht".
Nur eine Farbe ersetzten ist ja auch kein Problem, da es floodfill gibt. Nun will ich aber so einen "Effekt" wie (Programm1, Test1).
Ich weiß nicht, wie ich das mit normalen Mitteln hinkriegen soll.
Ich dachte erst, dass man erst das blaue Farbe mit floodfill durch rot ersetzten und dann ein paar schwarze Pixel reinsetzten könnte, aber schon beim zweiten Aufruf könnte man da mit floodfill nichts mehr machen, da dann zwei unterschiedliche Farben (Rot,Schwarz) im Bereich wären :\. Dann habe ich gedacht, dass es vielleicht nur daran liegt, dass ich das alles auf ein Image zeichne und habe das Gleiche wie in Programm 1, Test 1 nochmal in DirectX gemacht (Delphi X). Der einzige Unterschied ist, dass ich dort ne blaue Farbe habe anstatt rot. Alles ist wie im oben angegebenen Codestück, nur dass alles auf das DDraw Objekt gezeichnet wird. Dort hatte ich dann anstatt 4 Frames dann 7 bis 8 Frames, also immer noch zu wenig.

Jetzt meine Frage:
Kennt ihr irgendwie eine Möglichkeit, wie man den Effekt in Programm 1 Test 1 machen könnte, dass man dort aber dann auch so um die 25 Frames hat.
Also, ich weiß nicht, wie ich das machen soll. Mich würde es wirklich sehr interessieren, ob ihr da ein "Tuningtip" habt.
Schon im Vorraus vielen Dank

€dit:
dp, mach doch mal bitte ein Boardupdate =)
Ich möchte wieder, dass der Code eingerückt wird.

--


Dieser Beitrag wurde am 24.03.2002 um 22:06 von feigling bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
001
24.03.2002, 22:02
Retro



Such mal in der Onlinehilfe nach "Scanlines" ;)

--

shielding people from their own stupidity is an evolutionary step backwards anyway.

/* God is dead!............Nietzsche */
/* Nietzsche is dead!......God */
/* Nietzsche is God!.......The Dead */

zum Seitenanfang zum Seitenende Profil || Suche
002
24.03.2002, 22:08
feigling



Hmm, wenn du meinst, dass Scanlines was bringen.
Ich habe zwar davon schon was gehört, aber hätte nicht gedacht, dass man sie auch für so etwas nehmen kann.
Probier ich jetzt einfach mal aus =)

--

zum Seitenanfang zum Seitenende Profil || Suche
003
24.03.2002, 22:11
Retro



Sind zigfach schneller als alles per Pixel abzutattern.. probiers aus und du wirst überrascht sein ;)

--

shielding people from their own stupidity is an evolutionary step backwards anyway.

/* God is dead!............Nietzsche */
/* Nietzsche is dead!......God */
/* Nietzsche is God!.......The Dead */

zum Seitenanfang zum Seitenende Profil || Suche
004
25.03.2002, 12:18
feigling



hmm, das Problem ist nur, ich versteh das irgendwie nicht =)
Also, ich hab es geschafft, vom ganzen Bild das blau zu entfernen, aber ich weiß nicht, wie ich das nur auf die Innenflächen der Schrift anwenden kann.
Hmm, ich versuche das nochmal, aber wenn nicht klappt, es ist ja auch schon, wenn man mit floodfill die ganze Innenfläche ändern kann =)
Kann auch nicht jeder ;)

--


Dieser Beitrag wurde am 25.03.2002 um 12:19 von feigling bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
005
25.03.2002, 15:23
Retro



Jetzt weiss ich garnicht was du willst o_O

Werd mir nachher mal den Source saugen, vielleicht kann ich dann besser verstehen was du vor hast ;)

--

shielding people from their own stupidity is an evolutionary step backwards anyway.

/* God is dead!............Nietzsche */
/* Nietzsche is dead!......God */
/* Nietzsche is God!.......The Dead */

zum Seitenanfang zum Seitenende Profil || Suche
006
25.03.2002, 15:32
feigling



Jup, wäre nett.
Ich will diesen Effekt wie in Programm 1 Test 1 haben, weiß aber nicht, wie ich den mit Scanlines machen soll :\

--

zum Seitenanfang zum Seitenende Profil || Suche