![]() |
Paintbox.Canvas.Draw mit Bitmap
Hallo,
eigentlich sollte es doch nicht so schwer sein, ein Bitmap auf eine Paintbox zu zeichnen, oder?
Delphi-Quellcode:
Die Bitmap wird vorher mit
myPaintbox.Canvas.Draw(0,0, FBitmap)
Delphi-Quellcode:
geladen, funktioniert alles soweit.
FBitmap.LoadFromFile(filepath)
Warum zeichnet er dann kein Bild? Oder sollte man für solche Aktionen lieber die TImage- Komponente verwenden? PS: Ich habe jetzt das ganze auch mal mit TextOut probiert, auch da zeigt es mir nichts an. Scheint also mehr ein Problem der Paintbox zu sein (oder es ist ein Problem von mir, dass ich das nicht richtig bedienen kann :roll:) |
AW: Paintbox.Canvas.Draw mit Bitmap
WANN zeichnest Du denn?
Du kannst nur in der entsprechenden Ereignisbehandlung zeichnen (OnPaint, wenn ich es noch richtig weiß). Wenn Du "von außen" irgendwas drauf malst, wird das ggf. wieder von der Komponente selbst mit einer Hintergrundfarbe überschrieben. |
AW: Paintbox.Canvas.Draw mit Bitmap
Ah ok, dann wird es daran liegen.
Bislang zeichne ich direkt beim FormCreate, damit soll sozusagen beim Start ein Hintergrundbild auf die Form gezeichnet werden. Eine Frage: wird die OnPaint methode dann also sozusagen ständig neu aufgerufen? |
AW: Paintbox.Canvas.Draw mit Bitmap
Wann Windows Deine einzelnen Controls neu zeichnet kannst Du nicht direkt beeinflussen.
Wenn Deine Paintbox gezeichnet wird, wird der Hintergrund gezeichnet und das, was Du in OnPaint veranlasst. Wenn Du ein statisches Bild darstellen willst wäre ein Image evtl. die bessere Wahl. |
AW: Paintbox.Canvas.Draw mit Bitmap
Ich habe mit Absicht eine Paintbox gewählt, da ich später dann noch diverse Symbole (auch als Bitmaps) darauf anzeigen lassen will, welche sich je nachdem verändern. Dazu arbeite ich mich gerade ganz neu in eben genau dieses Thema 2D-Grafiken ein. Wenn nur beim OnPaint etwas gezeichnet wird, wie kann ich dann von Außerhalb in anderen Methoden auf die Paintbox zeichnen lassen? Eigentlich müsste doch jeglicher Aufruf der irgendetwas mit der Bearbeitung der Paintbox zu tun hat, automatisch OnPaint aufrufen?
|
AW: Paintbox.Canvas.Draw mit Bitmap
Du kannst ja jederzeit PaintBox.Paint (bzw. Refresh o.ä.) aufrufen.
In OnPaint kannst Du dann bestimmte Bedingungen und Daten prüfen und danach dynamisch den Inhalt zeichnen. Du musst aber immer ALLES zeichnen. Irgendwas zum letzten Stand dazu zeichnen geht nicht. Du kannst natürlich auch extra ein Bitmap nutzen, das Du nach und nach bemalst und dieses regelmäßig in die Paintbox kopierst oder in einem Image darstellen lässt. |
AW: Paintbox.Canvas.Draw mit Bitmap
ok, dann ist alles klar. Ich frage mich nur, ob es nicht eine weniger rechenintensive Methode gäbe. Wenn man jetzt fürs Zeichnen mehrere zehntausend Abfragen benötigen würde und die Paintbox 20 mal pro Sekunde neu zeichnen würde, würde man wahrscheinlich an die Grenzen der Möglichkeiten stoßen. Aber dann würde man wahrscheinlich auch keine Paintbox mehr verwenden sondern auf große Grafikbibliotheken (OpenGL) setzen, oder? Naja, bei mir sind es Gott sei dank wahrscheinlich nicht mehr als hundert und 20 mal pro Sekunde brauch ich auch nicht.
|
AW: Paintbox.Canvas.Draw mit Bitmap
Wenn´s schnell gehen muss ist es sicherlich sinnvoll, mehrere Bitmaps zu verwalten und diese dann schnell auf die Zeichenfläche zusammen zu kopieren.
Und wenn es noch schneller gehen soll dann bieten sich zusätzlich schnelle Grafikbibliotheken an. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:48 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