Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Pixelübertragung auf PaintBox (https://www.delphipraxis.net/104360-pixeluebertragung-auf-paintbox.html)

rawsoul 2. Dez 2007 12:12


Pixelübertragung auf PaintBox
 
Mahlzeit zusammen,

Delphi bin ich gerade erst am herunterladen, musste leider meinen PC formatieren. Trotzdem habe ich eine Art Pseudocode aufgeschrieben, damit ich es gleich so schnell wie möglich umsetzen kann ;)

Mein Vorhaben:
Erst einmal Pixel um den Mauszeigerbereich in das Programm in eine Paintbox übertragen. Später werde ich es dann vergrößern. Jedoch bin ich mir ziemlich sicher, dass meine Methode extrem langsam sein wird, da ich schon einmal Probleme mit einer ähnlichen Idee hatte. Hier mal der Codeschnipsel:

Delphi-Quellcode:
procedure magnify(x,y:integer; pb:tpaintbox);
var
   xt,yt:integer;
begin
   for xt:=-10 to 10 do
      for yt:=-10 to 10 do
         begin
            pb.canvas.pixels[xt,yt]:=getpixel(getwindowdc(getdesktopwindow),x+xt,y+yt);
         end;
end;
Das ganze wird voraussichtlich über einen Timer aufgerufen:

Delphi-Quellcode:
procedure timer(sender:tobject);
begin
   magnify(mouse.cursorpos.x,mouse.cursorpos.y,paintbox);
end;
Nun, jetzt frage ich euch, wie man das ganze schneller realisieren könnte :)

Folgende Ideen sind mir gekommen, um es zu beschleunigen:
- Pixelfarben in ein Array übertragen, von dort aus in die Paintbox
- Direkt in ein Bitmap malen, dann auf die Paintbox übertragen
- "Screenshot" anfertigen, Bereich ausschneiden und in Paintbox übertragen
- Möglicher Weise ein Windows-Paintereignis abfangen und Informationen "klauen"

Wie würdet ihr rangehen?

Vielen Dank im Voraus,
liebe Grüße,
Frank.

bitsetter 2. Dez 2007 12:27

Re: Pixelübertragung auf PaintBox
 
Hallo,

da ganze würde ich mit einem Hier im Forum suchenoffscreenbitmap machen, also ein Bild im Speicher. Dann könnte man schon mal mit ScanLine arbeiten. Dann zeichnest du das fertige Bild mit windows.BitBlt() auf deine PaintBox.
Zitat:

Zitat von rawsoul
Delphi-Quellcode:
(getwindowdc(getdesktopwindow),x+xt,y+yt);
         end;
end;

IMHO hast du hier ein schönes Speicherleck eingebaut.

EDIT:Oder gleich mit BitBlt() Das Bild vom Desktop auf deine Paintbox zeichnen.

rawsoul 2. Dez 2007 13:20

Re: Pixelübertragung auf PaintBox
 
Klappt bestens mit BitBlt, vielen Dank :D


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:11 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