AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Bitmap.Canvas -> Form.Canvas ... nix zu sehen
Thema durchsuchen
Ansicht
Themen-Optionen

Bitmap.Canvas -> Form.Canvas ... nix zu sehen

Ein Thema von TERWI · begonnen am 9. Jul 2018 · letzter Beitrag vom 19. Jul 2018
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von TERWI
TERWI

Registriert seit: 29. Mär 2008
Ort: D-49626
381 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: Bitmap.Canvas -> Form.Canvas ... nix zu sehen

  Alt 9. Jul 2018, 18:47
ach Leute, ihr immer mit Quellcode ... verstehe ich ja zum verstehen - aber was ist an meinen Fragen so unverständlich, das man's auch nicht auch ohne verseht ? ... sorry.

Ist im Prinzip das gleich wie in #3.
Bitmap an OSD.Canvas: ... da tut sich nix !
Direkt schreiben an OSD.Canvas: ... ist OK !!!

Ich verstehe eben genau dieses "Feature" nicht.

@Redeemer
Ob mit oder ohne TImage - geht nur direkt an Canvas.

Geändert von TERWI ( 9. Jul 2018 um 18:50 Uhr)
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.074 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Bitmap.Canvas -> Form.Canvas ... nix zu sehen

  Alt 9. Jul 2018, 20:00
Wir fragen ja nicht aus Spaß an der Freude nach Quelltext.
In 99 % der Fälle ist es nämlich so, dass der Ersteller der Ursprungsfrage Informationen vorenthält, die er als unwichtig erachtet, die aber entscheidende Details sind.

Oft ist es auch so, dass beim Erstellen eines abgespeckten Beispielprojektes das Problem wundersamerweise verschwindet und man drauf kommt, warum etwas nicht funktioniert.

Die Zahl der Threads, die ich zu schreiben begonnen hatte (wohlbemerkt mit Beispielprojektes) ist doppelt bis dreimal so hoch wie meine tatsächlich gestellten Fragen, weil ich dann plötzlich meinen Fehler gesehen habe.

Ich verstehe auch nicht, warum das so ein Problem für dich ist?
Mach doch zwei Formulare und einen Timer.
Im OnTimer zeichnest du dann aufs zweite Formular einmal so, wie es jetzt funktioniert und dann nochmal so, wie du es gerne hättest.
Irgendwelche zufälligen Linien und bisschen Text.

Ich möchte einen symbolischen Euro wetten, dass du eigentlich ein Threading-Problem hast.
Der DVB-Stream wird ja wahrscheinlich nicht im VCL-Mainthread empfangen, dekomprimiert und das OSD-Menü gezeichnet...nicht wahr?

Geändert von TiGü ( 9. Jul 2018 um 20:04 Uhr)
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.074 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Bitmap.Canvas -> Form.Canvas ... nix zu sehen

  Alt 11. Jul 2018, 13:25
Ich möchte einen symbolischen Euro wetten, dass du eigentlich ein Threading-Problem hast.
Der DVB-Stream wird ja wahrscheinlich nicht im VCL-Mainthread empfangen, dekomprimiert und das OSD-Menü gezeichnet...nicht wahr?
kwT
  Mit Zitat antworten Zitat
Benutzerbild von TERWI
TERWI

Registriert seit: 29. Mär 2008
Ort: D-49626
381 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Bitmap.Canvas -> Form.Canvas ... nix zu sehen

  Alt 11. Jul 2018, 13:57
... es formt sich was - kleinen Moment, muss noch was testen ...
  Mit Zitat antworten Zitat
Benutzerbild von TERWI
TERWI

Registriert seit: 29. Mär 2008
Ort: D-49626
381 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Bitmap.Canvas -> Form.Canvas ... nix zu sehen

  Alt 11. Jul 2018, 14:28
Hölle - es funzt !
Delphi-Quellcode:
procedure TForm_OSD.Update(BitMap : TBitMap);
begin
  if Assigned(Bitmap) then
  begin
    Image.Picture.Bitmap.Assign(BitMap);
// Image.Repaint;
  end;
end;
Allerdings: Es flackert deutlich sichtbar (nervig) in diesen o.g. unrythmischen ABständen, zu denen die Anzeige vorher völlig verschwand.
Spielt dabei anscheinend keine Rolle, ob Image.Repaint ausmarkiert ist oder nicht.
... wenn das flaclern nun noch zu beseitigen wäre ... Hauptgewinn !

@ TiGü:
Logo spielt da ein Thread mit, sonst wäre das alles ein Glücksspiel, bzw. Bild/Ton würden je nach "Abfrage-Umfang" ewig stottern...
Mache ich etwa wie folgt:
- Mein DS-Sink-Filter schickt TS-Datenblöcke (i.d.r. hier 512KB je ca. 0.5s) an alle "zuhörenden OnTsReceive" Methoden.
- Jeder TS-Block wird in eigene Puffer kopiert und dann je ein Thread gestartet, der die Daten auswertet und ggf. anzeigt (Ziel: Anzeige auch eigener Fred).

Geändert von TERWI (11. Jul 2018 um 14:31 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von TERWI
TERWI

Registriert seit: 29. Mär 2008
Ort: D-49626
381 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Bitmap.Canvas -> Form.Canvas ... nix zu sehen

  Alt 11. Jul 2018, 15:56
Hab numehr diverses zum Thema "Flackern" nachgesucht, bin aber nicht wirklich fündig geworden.
"DoubleBuffered" an/aus in der OSD-Form bringt nichts.
Beim TImage scheint es so was nicht zu geben ?

Folgendes probiert:
Delphi-Quellcode:
procedure TForm_OSD.Init(BitMap : TBitMap);
begin
  if Assigned(Bitmap) then
  begin
    Image1.Picture.Bitmap.Assign(BitMap);
  end;
end;

procedure TForm_OSD.Update(BitMap : TBitMap);
begin
  if Assigned(Bitmap) then
  begin
    Image.Picture.Bitmap.Canvas.Draw(0, 0, Bitmap);
  end;
end;
Ich rufe einmal INIT auf und danach nur UPDATE.
Das funktioniert zwar (auch) und flackert nicht - ABER:
... zeigt eine Weile meine Änderungen des FBMOSD an, bleibt dann aber einfach "stehen" (Bildinhalt bleibt da).
D.h., das wo zuvor immer blankes Panel oder flackerndes Image zu erwarten war.

Mir gehen die Ideen aus ... was ist das ?

Nachtrag:
BitMap FBMOSD hat immer den gleichen Zeiger und die gleichen Abmessungen - ist da der interne Speicher weg/woanders ???

Geändert von TERWI (11. Jul 2018 um 16:00 Uhr)
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.174 Beiträge
 
Delphi 12 Athens
 
#7

AW: Bitmap.Canvas -> Form.Canvas ... nix zu sehen

  Alt 11. Jul 2018, 15:59
Delphi-Quellcode:
  if Assigned(Bitmap) then
  begin
    if Image.Picture.Bitmap.Canvas.BeginScene then
    begin
       Image.Picture.Bitmap.Canvas.Draw(0, 0, Bitmap);
       Image.Picture.Bitmap.Canvas.EndScene;
    end;
,,,
Hilft das ?

Aber ich glabe eher da ist irgendwas anders mit Threads im Gange bei dir.

Rollo
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.643 Beiträge
 
Delphi 12 Athens
 
#8

AW: Bitmap.Canvas -> Form.Canvas ... nix zu sehen

  Alt 11. Jul 2018, 16:00
- Jeder TS-Block wird in eigene Puffer kopiert und dann je ein Thread gestartet, der die Daten auswertet und ggf. anzeigt (Ziel: Anzeige auch eigener Fred).
Wie genau wird denn die Bitmap aus dem Thread angezeigt? Du weißt schon, daß du keine VCL-Controls (z.B. TImage) aus einem Thread heraus verwenden kannst?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von TERWI
TERWI

Registriert seit: 29. Mär 2008
Ort: D-49626
381 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Bitmap.Canvas -> Form.Canvas ... nix zu sehen

  Alt 11. Jul 2018, 16:08
Zitat:
Wie genau wird denn die Bitmap aus dem Thread angezeigt? Du weißt schon, daß du keine VCL-Controls (z.B. TImage) aus einem Thread heraus verwenden kannst?
Der Thread arbeit nur in einer Schleife den TS-DatenBlock ab.
Es greift auch niemand anderes auf den Thread zu.
Der DatenBlock selbst wird wieder in Teile gesplittet und evaluiert - das Ergebnis daraus wird angezeigt.
Soweit ich das bisher feststellen konnte, ist das alles (noch) schnell genug, bevor ein neuer DatenBlock einrifft (ca. alle o,5 Sek.)
Zur Sicherheit habe ich noch ein Blocking eingebaut, das kein neuer Block akzeptiert wird, so lange der aktuelle noch nicht fertig ist.

Warum kann ich kein TImage aus einem Thread aufrufen ?
Scheint doch so weit nach Hindernissen zu funzen - aber es flackert halt ...

Ich versuche mal einen Auszug meines Threads zu posten, ohne das es den Server sprengt

Geändert von TERWI (11. Jul 2018 um 16:12 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.960 Beiträge
 
Delphi 12 Athens
 
#10

AW: Bitmap.Canvas -> Form.Canvas ... nix zu sehen

  Alt 9. Jul 2018, 20:13
ach Leute, ihr immer mit Quellcode ... verstehe ich ja zum verstehen - aber was ist an meinen Fragen so unverständlich, das man's auch nicht auch ohne verseht ? ... sorry.
Daran ist nichts unverständlich, aber das Problem ist, dass alles was du von dem Quelltext zeigst auch funktioniert. Da muss schon noch etwas anderes sein. Und das sehen wir nicht.

Damit du das auch glaubst... im Anhang liegt ein Beispiel mit exakt deinem Quelltext. Aber das Entscheidende dürfte der Quelltext sein, den ich hinzufügen musste, damit es klappt, nämlich den zum Erzeugen, Setzen der Größe und Füllen des Bitmaps usw.
Wie gesagt, alles was du oben an Quelltext gezeigt hast, ist da exakt so drin. Abgesehen davon, dass du da ein type statt eines var drin hast (type FBMOSD : TBitmap; ).

Die einzigen direkten Abbruchbedingungen in Draw sind übrigens, dass die Grafik nil oder Empty ist. Was passiert eigentlich, wenn du einen Haltepunkt auf das OnPaint-Ereignis setzt. Kommst du da an? Wird das Draw ausgeführt?
Angehängte Dateien
Dateityp: zip OSD Test.zip (6,0 KB, 5x aufgerufen)
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      

 

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 11:17 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-2025 by Thomas Breitkreuz