Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Desktop Filmen -> Flackern entfernen (https://www.delphipraxis.net/148241-desktop-filmen-flackern-entfernen.html)

Anonymos 25. Feb 2010 19:49


Desktop Filmen -> Flackern entfernen
 
Hey,

Ich bin grad dabei mir ein kleines Tool zu schreiben, dass mir einen bestimmten (wählbaren) Bereich des Desktops in einem Fenster vergrößert, oder verkleinert ausgibt. In Echtzeit.

Dabei greife ich über ein Canvasobjekt mit dem Desktop-HDC auf den Desktop zu, kopier das betreffende Rechteck, streck dieses und zeichne es auf mein Formular.
Das funktioniert auch woweit priema. Solange ich auf der Windowsiberfläche bin.

Wenn ich jedoch (in meinem Fall Ultrastar) dublizieren möchte fängt mein "Film" an zu flimmern.
Ich hab jetz mal die erstellten Bitmaps der Screenklone gespeichert und festgestellt, dass diese plötzlich weiße Streifen haben.
Die werden natürlich angezeigt und verursachen das flimmern.

Mein bisheriger Versuch dieses Flimmern abzustellen sieht so aus:
Ich suche nach durchgängig weißen Linien im Bitmap und wenn ich sowas finde, dann ersetz ich diese bereiche durch Teile eines vorherigen Screenshots.
Delphi-Quellcode:
procedure TViewRect.AntiWhite;
var
  x, y: integer;
  whiteline: boolean;
begin
  for y := 0 to DRect.Bottom -1 do
  begin
    if (Bmp2[AktBmp2].Canvas.Pixels[0,y] = $00FFFFFF) then
    begin
      whiteline := true;
      for x := 1 to DRect.Right -1 do
      if not(Bmp2[AktBmp2].Canvas.Pixels[x,y] = $00FFFFFF) then
      begin
        whiteline := false;
        break;
      end;
      if whiteline then
      begin
        Bmp2[AktBmp2].Canvas.CopyRect(Rect(0,y-1,DRect.Right,y),Bmp2[LastBmp2].Canvas,Rect(0,y-1,DRect.Right,y));
      end;
    end;
  end;
end;
Prinzipiell funzt dass auch, is aber sowas von laaaaam, dass des Bild manchmal für mehrere Sekunden stehen bleibt.
Hat jemand en Vorschlag, wie man das ganze beschleunigen kann?

mfg

Luckie 25. Feb 2010 20:28

Re: Desktop Filmen -> Flackern entfernen
 
Guck dir mal ScanLine an. Das dürfte schneller sein als jeden Pixel einzeln auszulesen.

Anonymos 26. Feb 2010 15:47

Re: Desktop Filmen -> Flackern entfernen
 
Hey super !!

Danke für die schnelle Antwort Luckie

War genau, was ich gebraucht hab.

-- Closed --


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:24 Uhr.

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