Einzelnen Beitrag anzeigen

Benutzerbild von Corelgott
Corelgott

Registriert seit: 11. Apr 2003
Ort: Lübeck
213 Beiträge
 
Delphi 2006 Enterprise
 
#5

Re: Scanline in 3 bis 4 MINUTEN.... Ok

  Alt 6. Mai 2004, 10:49
*schluck*

Erst mal vielen Dank an Muetze1 für die geopferte Zeit....

So, also, na dann...

Ich habe mir mal deine Vorschläge angesehen und den überarbeiteten Code versucht zu verstehen.
(Ich bin dabei zu der erkenntnis gekommen, dass ich doch besser etwas anderes als Informatik studieren sollte! )
(*etwas übertrieben*)

Ist auch durch aus veständlich was du da als kretikpunkte aufführst und ich habe es auch schon teilweise umgesetzt.

Aber mit so ein paar Punkten habe ich dann doch noch so ein bisschen trouble.
Wie zum bsp. mit
Zitat:
Du hast nix mal probeweise auf 32 Bit umgestellt
eigentlich hatte ich das und dann bekam ich cryptische bilder in meiner "ich-habe-mir-ne-seltsame-grafik-routine-geschieben-funktion". So richtig schön mir verzerrung usw.

Des Weiteren:
Zitat:
5. Ein wenig Assembler würde da nochmehr tun
Tolle Idee! Wäre bei diesem Pukt bloß sehr hilfreich, wenn ich assambler könnte. (Fällt also aus... Ich muss auch gestehen, das ich noch nicht mal C kann... in sofern bin ich von solchen low-level sachen noch meilen entfernt.)

So nun ja habe viel in meimem Proggi herrumgeschraubt.. Aber Irgendwie will da die performance nicht richtig kommen. Ich brauche pro frame zum rechen und zeichen immernoch so was um die 20ms. Die Grafikroutine kann man bestimmt noch schenller machen.. Habe da auch schon ewtas im Auge, was ich aber mal wieder *ich@doof.de* nicht hinbekomme.

Also wenn ich mit meinem Scanline-Kram
Code:
  for Y := 0 to Image.height - 1 do
  begin
    pt := tmp.ScanLine[Top + Y];
    inc(pt, Left);
    ps := Image.ScanLine[Y];

    for X := 0 to Image.width - 1 do
    begin
      if ((ps^.rgbRed <> 255) or (ps^.rgbBlue <> 0) or (ps^.rgbGreen <> 0)) then
        pt^ := ps^;
      inc(pt);
      inc(ps)
    end;
  end;
Meinen Ball auf das tmp-Bitmap kopiert habe um es nachher mit meiner Render-Prozedur herraus zu geben, muss ich beim rendern später
Code:
Canvas.Draw(0, 0, tmp);
nehemen. Wenn ich die von Muetze1 vorgeschlagene
Code:
  BitBlt(Parent.Handle, 0, 0, tmp.Width, tmp.Height, tmp.Canvas.Handle, 0, 0, SRCCOPY);
benutzen will fehlt der Ball, den ich, so dachte ich zu mindest, gerade reingezeichnet habe. Mit der Draw() geschichte funzt es aber...

2. Wie man oben sieht mache ich den ganzen Scanline-Kram nur, damit ich eine Farbe (255,0,0) rausfiltern kann. Hab mal ein bisschen gesucht und herrausgefunden, dass es eine Funtkion namens MaskBlt gibt. Da ich eh von jedem Bil eine Schwarz-weis version habe um das abprallen zu erleichtern könnte ich doch auch die benutzen? oder?

Ich habe bei google und hier nirgend was gefunden, wie genau ich den krams benuzte... Beimm selbst dran testen bin ich an diesen seltsam 32Bit-Tenär-Operator geschietert... Hab mir zwar das durchgelesen was das MSDN dazu sagt aber.. JA! (Das ist ja schön? Kann man das essen?)

Also falls dazu wer ein tutorial rumliegen hat... -> thx

cya
Corelgott
  Mit Zitat antworten Zitat