Delphi-PRAXiS
Seite 2 von 6     12 34     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Bitmap.Canvas -> Form.Canvas ... nix zu sehen (https://www.delphipraxis.net/197007-bitmap-canvas-form-canvas-nix-zu-sehen.html)

TERWI 9. Jul 2018 17:40

AW: Bitmap.Canvas -> Form.Canvas ... nix zu sehen
 
"FormOSD" ist eine eigenständige Form und wird in meine Unit eigebunden.
Das Image wird dort korrekt de-/initialisiert, Alignment ist alClient.
Die Form wird zur Laufzeit (vor Zugriff) mittels CLientWidth/Height auf die gleiche Größe meiner BitMap gesetzt. Sollte also eigentlich alles passen.

Tut es aber nicht "tuten" - alles grau. Direktes schreiben auf FormOSD funktioniert so weit (auch ohne geflacker bei schnellem wiederholtem Update, wa ich eigentlich erwartet hatte).
Dein Verdacht, daß da die eine oder andere wesentliche Information noch fehlt ist sicherlich begründet - aber wie schon gesagt ist das ganze Projekt nicht wirklich in Einzelteilen zu zerlegen, hier gejt's um eben dieses spezielle Problem:

Bitmap to Form.

Redeemer 9. Jul 2018 17:54

AW: Bitmap.Canvas -> Form.Canvas ... nix zu sehen
 
Du schreibst wohl zu früh.
TImage.Canvas kann seine Größe nicht zur Laufzeit anpassen. Sie wird beim ersten Schreiben eingefroren. Möglicherweise ist die Größe zum Zeitpunkt des ersten Schreibens nicht richtig.

Ohne Quellcode kann dir aber wohl keiner helfen.

TERWI 9. Jul 2018 18:47

AW: Bitmap.Canvas -> Form.Canvas ... nix zu sehen
 
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.

TiGü 9. Jul 2018 20:00

AW: Bitmap.Canvas -> Form.Canvas ... nix zu sehen
 
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?

jaenicke 9. Jul 2018 20:13

AW: Bitmap.Canvas -> Form.Canvas ... nix zu sehen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von TERWI (Beitrag 1406813)
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?

TERWI 11. Jul 2018 13:17

AW: Bitmap.Canvas -> Form.Canvas ... nix zu sehen
 
Es klappt immer noch nicht - ABER:
Das scheint ganz offensichtlich nicht daran zu liegen, ob ich meine erstellte BitMap direkt in das Canvas der OSD-Form schreibe oder ggf. extra noch ein Image in die Form packe und da rein schreibe.

Anscheinend wir hier zur Laufzeit meine FBMOSD-Bitmap irgendwie "zerballert", so dass kein Inhalt mehr erscheint und das Canvas dort nach RePaint wieder "grau" wird.

Ich nutze lediglich FillRect und TextOut af dem Canvas - mittlerweile habe ich alles ausmarkiert, so das eigentlich das BM nur noch einmal zum Start schwarz initialisiert wird und dann betreff Anzeige gar nichts mehr passiert.

Das Eigenartige:
Das passierte vorgestern "sofort" - OSD immer grau (Deshalb meine Anfrage).
Nun kann es auch mal 1-10 Sek. oder länger dauern, bis es "knallt".
Der Daten-Parser und Rest des Programms läuft aber ungehindert problemlos weiter.
... ich finde da einfach keinen Fehler.

OK - ich weiß: Ohne Einblick in den Source ist da schwer zu helfen ... aber was gibt es da für Möglichkeiten, eine BitMap zu zerstören, wenn man eigentlich gar nichts damit anstellt ???

himitsu 11. Jul 2018 13:21

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

Zitat von Redeemer (Beitrag 1406812)
TImage.Canvas kann seine Größe nicht zur Laufzeit anpassen. Sie wird beim ersten Schreiben eingefroren.

Nein, das TImage.Canvas ist immer so groß, wie die TImage-Komponente,
aber die Grafik im TImage/TPicture ändert natürlich nicht seine Größe. (beim ersten Zugriff wird es so groß erstellt, wie TImage zu diesem Zeitpunkt ist)

Auf TImage.Canvas zeichnet man auch nicht drauf!
TImage.Picture.Graphic.Canvas
TImage.Picture.Bitmap.Canvas (beim Zugriff auf TImage.Picture.Bitmap wird in TImage.Picture.Graphic ein neues Bitmap erstellt, wenn dort kein TBitmap drin ist)
...
halt was in dem Picture.Graphic für ein Typ drin steckt

TiGü 11. Jul 2018 13:25

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

Zitat von TiGü (Beitrag 1406815)
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

TERWI 11. Jul 2018 13:57

AW: Bitmap.Canvas -> Form.Canvas ... nix zu sehen
 
... es formt sich was 8-) - kleinen Moment, muss noch was testen ...

TERWI 11. Jul 2018 14:28

AW: Bitmap.Canvas -> Form.Canvas ... nix zu sehen
 
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).


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:27 Uhr.
Seite 2 von 6     12 34     Letzte »    

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