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