AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TImage.Refresh in Lazarus

Ein Thema von Captain Albern · begonnen am 16. Feb 2019 · letzter Beitrag vom 20. Feb 2019
Antwort Antwort
Captain Albern

Registriert seit: 15. Feb 2019
11 Beiträge
 
#1

TImage.Refresh in Lazarus

  Alt 16. Feb 2019, 09:37
Guten Morgen,

ich verwende ein TImage um Bilddaten anzuzeigen, die ich in TImage.Picture.Bitmap.ScanLine kopiere. Wenn das Kopieren fertig ist, führe ich TImage.Refresh aus, damit es angezeigt wird.

Das hat mit Delphi immer funktioniert. Mit Lazarus werden die Bilddaten erst dann aktualisiert angezeigt, wenn der Benutzer das Fenster und damit das TImage in seiner Größe ändert. Auch Repaint funktioniert nicht.

Was mache ich falsch ?

Gruß
C.A.
  Mit Zitat antworten Zitat
Captain Albern

Registriert seit: 15. Feb 2019
11 Beiträge
 
#2

AW: TImage.Refresh in Lazarus

  Alt 16. Feb 2019, 17:43
Ergänzung. Ich habe ein neues Test-Projekt mit einem TImage und einem Button angelegt und führe folgenden Code aus. Es wird ein buntes Rauschen erzeugt, wenn man auf den Knopf drückt. Allerdings nur beim ersten Mal, danach wird das Bild nicht aktualisiert.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var y,x : Integer;
    Line : Array [0..959] of Byte;
begin
  Randomize;
  Image1.Width:=320;
  Image1.Height:=240;
  Image1.Picture.Bitmap.Width:=320;
  Image1.Picture.Bitmap.Height:=240;
  image1.Picture.Bitmap.PixelFormat:=pf24Bit;
  for y := 0 to 239 do begin
    for x := 0 to 959 do
      Line[x]:=Random($FF);
    Move(Line[0],Image1.Picture.Bitmap.ScanLine[y]^,960);
  end;
  Image1.Refresh;
end;
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

AW: TImage.Refresh in Lazarus

  Alt 16. Feb 2019, 19:38
Randomize bitte nur einmal beim Start des Programms aufrufen!
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: TImage.Refresh in Lazarus

  Alt 16. Feb 2019, 20:23
Hallo,
nimm doch Invalidate.
Heiko
  Mit Zitat antworten Zitat
Captain Albern

Registriert seit: 15. Feb 2019
11 Beiträge
 
#5

AW: TImage.Refresh in Lazarus

  Alt 17. Feb 2019, 12:31
Vielen Dank für die Mühe, aber beides funktioniert nicht.

Randomize ist nicht das Problem. Es funktioniert auch mit anderen Daten, die sich eindeutig ändern nicht.

Ich habe es mit Refresh, Repaint und Invalidate versucht, sowohl vom Image als auch vom Form. Das Bitmap wird nur einmalig aktualisiert.

Ich habe nochmal einen Counter eingefügt und das Bild bei jedem Mal drücken um einen Pixel breiter gemacht. Dann wird es komplett aktualisiert und das Rauschen wird auch neu zufällig dargestellt.

Gibt es vielleicht eine andere Möglichkeit (außer OpenGL und DirectX), Bitmapdaten mit Lazarus schnell und effizient auf dem Bildschirm anzuzeigen ? Ich brauche auch kein Scaling, keine Transparenz, nix, einfach nur Bitmapdaten 1:1 auf den Bildschirm. Danke !
  Mit Zitat antworten Zitat
Captain Albern

Registriert seit: 15. Feb 2019
11 Beiträge
 
#6

AW: TImage.Refresh in Lazarus

  Alt 17. Feb 2019, 12:36
PS: Folgender Code funktioniert (eine neue Zeile). Sieht dämlich aus, ist aber so.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var y,x : Integer;
          Line : Array [0..959] of Byte;
begin
  Image1.Width:=320;
  Image1.Height:=240;
  Image1.Picture.Bitmap.Width:=319;//Neu eingefügt, eigentlich nutzlos
  Image1.Picture.Bitmap.Width:=320;
  Image1.Picture.Bitmap.Height:=240;
  image1.Picture.Bitmap.PixelFormat:=pf24Bit;
  for y := 0 to 239 do begin
    for x := 0 to 959 do
      Line[x]:=Random($FF);
    Move(Line[0],Image1.Picture.Bitmap.ScanLine[y]^,960);
  end;
  Image1.Refresh;
end;
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:36 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz