Einzelnen Beitrag anzeigen

Anonymos
(Gast)

n/a Beiträge
 
#1

Desktop Filmen -> Flackern entfernen

  Alt 25. Feb 2010, 19:49
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
  Mit Zitat antworten Zitat