gepuffertes zeichnen auf TImage

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
Antworten
lukas.s
Beiträge: 17
Registriert: Do 19. Mai 2011, 15:45

gepuffertes zeichnen auf TImage

Beitrag von lukas.s »

Hallo,

ich bin jetzt langsam am verzweifeln,...
entweder ich mach aus unwissenheit irgendetwas falsch, oder
ich überseh irgendwo irgendwie eine kleinigkeit!

hier erstmal der code ausschnitt:

Code: Alles auswählen

procedure TForm1.Render;
var
  Buffer: TPicture;
  i: Integer;
begin
  Buffer:= TPicture.Create;
  Buffer:=MyScreenShot;
  Buffer.Bitmap.Canvas.Brush.Color:=clWhite;
 
  for i:= 0 to 100 do
  begin
    Buffer.Bitmap.Canvas.Ellipse(Round(MyFlocke[i].x), Round(MyFlocke[i].y),
                                 Round(MyFlocke[i].x)+5, Round(MyFlocke[i].y)+5);
    MyFlocke[i].y := MyFlocke[i].y + MyFlocke[i].speed;
  end;
 
  BitBlt(Image1.Canvas.Handle, 0, 0,
         Buffer.Width, Buffer.Height,
         Buffer.Bitmap.Canvas.Handle, 0, 0,
         SRCCOPY);
 
  Buffer.Free;
end;


Das ganze wird in einem Timer aufgerufen und soll schneeflocken über den bildschirm rieseln lassen.

nur leider scheint es so, als würde ein einmal gezeichnetes bild nicht nocheinmal übermalen werden können.
also es steht einfach!

BitBlt "übermalt" schon den vorherigen inhalt von Image1, oder?
DoubleBuffered von Form1 hab ich true gesetzt.
Timer1.Interval hab ich 100 gesetzt und Timer1.Enabled auf true.
Render wird in Timer1 aufgerufen!

Wär toll wenn mir da jemand helfen kann.

Danke
lg
lukas

MAC
Beiträge: 770
Registriert: Sa 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
CPU-Target: 32Bit

Re: gepuffertes zeichnen auf TImage

Beitrag von MAC »

fangen wir mal ganz ioben an:

Code: Alles auswählen

Buffer:= TPicture.Create;
Buffer:=MyScreenShot;


In der ersten Zeile wird ein TPicture erstellt.
In der zweiten Zeile wird die Procedure MyScreenShot aufgerufen.
Was macht diese ??? stimmt meine Vermutung das diese ein Weiteres TPicture erstellt und somat die erste Zeile unnötog ist, bzw er werden 2 TPictures erstellt ???
das wäre ein schönes Speicherleck, würde bedeuten irgendwann verbraucht dein Programm 3 GB Ram :)

2. Brauchst du TPicture oder reicht TBitmap ???

3. Was BitBlt macht weis ich leider nicht...
4. Es kann sein das es ein unterschid zwischen TPicture.Width und TPicture.Bitmap.Width gibt.

Code: Alles auswählen

Signatur := nil;

lukas.s
Beiträge: 17
Registriert: Do 19. Mai 2011, 15:45

Re: gepuffertes zeichnen auf TImage

Beitrag von lukas.s »

hallo,

danke für die schnelle antwort!
ich hab jetzt grad nur mein Handy vor mir,... deshalb nur kurz.... ;)

myscreenshot ist ein TBitmap in welches ich zuvor einen screenshot gespeichert habe.

den Rest probiere ich später, bzw. morgen aus.

vielen dank schon mal!

LG lukas

lukas.s
Beiträge: 17
Registriert: Do 19. Mai 2011, 15:45

Re: gepuffertes zeichnen auf TImage

Beitrag von lukas.s »

hallo,

ich wollte nur kurz mitteilen, dass ich das problem mittlerweile anderst gelöst habe.

vielen dank an mac für seine mühen!

schönen abend.

lg lukas

MAC
Beiträge: 770
Registriert: Sa 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
CPU-Target: 32Bit

Re: gepuffertes zeichnen auf TImage

Beitrag von MAC »

nur aus interesse, würdest du uns sagen wie du das problem gelöst hast (es gibt bestimmt noch ne menge die daran interessiert sind zu wissen wie man gepuffert auf den bildschirm zeichnen (ich hab übrigens auch mal so nen schneeflockenprogramm geschrieben :D ))

Code: Alles auswählen

Signatur := nil;

Antworten