Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi schwarze Pixel weg : copyMode cmSrcAND cmSrcPaint zu langsam (https://www.delphipraxis.net/36852-schwarze-pixel-weg-copymode-cmsrcand-cmsrcpaint-zu-langsam.html)

henrik 27. Dez 2004 16:11

Re: schwarze Pixel weg : copyMode cmSrcAND cmSrcPaint zu lan
 
hey dizzy,

ich verwende doch den MMTimer ! (ich weiss : der TTimer ist sehr ungenau )


Das Dilemma ist im Augenblick :


-mit G32 kann man superschnelle Pixelmanipulationen machen, dafür klappts mit dem Anzeigen des bearbeiteten Bildes nur schlecht (bei mir zumindest).

-mit der normalen TPaintbox und copyrects... kostest das Anzeigen nichts !!,siehe code, (selbst bei 3 msec nur ca. 2% Auslastung) , dafür bremsen Pixelmanipulationen das ganze wieder auf 70 %.

Das folgende mit den ganzen copyRects-hin und hergeschiebe kostet fast nix bei timerInterval von 3 msec (!!!!) :

Nur fehlen leider die Pixelmanipulationen :


Delphi-Quellcode:
procedure TForm1.viewTimerTimer(Sender: TObject; Time: Cardinal);
var tr : TRect;
begin

tr.Left:=10;
tr.Top:=frameNr;
tr.Right:=10+viewRect.Right;
tr.Bottom:=frameNr+viewRect.Bottom;
buffer.Canvas.CopyMode:=cmSrcCopy;

buffer.Canvas.CopyRect(viewRect,orgImage.Canvas,tr);

buffer.Canvas.CopyRect(stdCarPos,carMask.Canvas,carRect);

buffer.Canvas.CopyRect(stdCarPos,car.Canvas,carRect);

PaintBox1.Canvas.CopyMode:=cmSrcCopy;
PaintBox1.Canvas.CopyRect(viewRect,Buffer.Canvas,viewRect);

dec(frameNr,shiftAdd);

if frameNr<10 then frameNr:=OrgImage.Height-700;


end;



Man müsste beides kombinieren können. Mit G32 manipulieren und mit dem anderen das Ergebnis anzeigen.

Ein TImage32 in ein TImage umwandeln ?

dizzy 27. Dez 2004 16:16

Re: schwarze Pixel weg : copyMode cmSrcAND cmSrcPaint zu lan
 
Nun, du kannst ein TBitmap32 auf ein beliebigen Canvas zeichnen. "TBitmap32.DrawTo(TCanvas.Handle, X, Y);"
Damit lässt sich also auch eine normale PaintBox vollkleistern :). Ob das nun aber schneller weiss ich nicht - einen Versuch wäre es wohl wert. (Im Hintergrund arbeitet da meine ich dann ein "BitBlt".)

Das mit dem Timer: Oki, bin von nem normalen Timer ausgegangen :drunken:

Gruss,
Fabian

\\edit: Korrektur: Die Methode nutzt "StretchDIBits", welches ein API-Call ist.

henrik 27. Dez 2004 18:18

Re: schwarze Pixel weg : copyMode cmSrcAND cmSrcPaint zu lan
 
das ist es ! :hello: danke dizzy

es funktioniert : mit 3 msec Interval nur ca. 4 % auslastung, und das mit einigen copyRects, drawTo's und pixel-manipulationen mit G32.

grüsse
henrik


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:55 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz