Grafik wird "wegradiert"

Anfängerfragen zum Programmieren mit PureBasic.
matbal
Beiträge: 261
Registriert: 30.03.2011 20:53

Re: Grafik wird "wegradiert"

Beitrag von matbal »

Das gezeichnete Bild wird beim CanvasGadget erst nach dem StopDrawing() sichtbar.

Beim Malen zuschauen geht nur, wenn du für jeder Linie extra jedesmal wieder StartDrawing() und StopDrawing() aufrufst.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8808
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Grafik wird "wegradiert"

Beitrag von NicTheQuick »

Wenn du alle Linien in einem StartDrawing-StopDrawing-Block zeichnest, dann werden sie beim Aufruf von StopDrawing() alle mit einem Mal gezeichnet. Nach deiner Beschreibung zu urteilen, machst du das nicht so. Und das ist dann natürlich arschlangsam.

Mist, mir ist gar nicht aufgefallen, dass es hier schon eine zweite Seite gibt. :mrgreen:
Benutzeravatar
kartmanne
Beiträge: 108
Registriert: 19.03.2015 18:16
Wohnort: Altenstadt
Kontaktdaten:

Re: Grafik wird "wegradiert"

Beitrag von kartmanne »

HI,
Beim Malen zuschauen geht nur, wenn du für jeder Linie extra jedesmal wieder StartDrawing() und StopDrawing() aufrufst
Nach deiner Beschreibung zu urteilen, machst du das nicht so.
8)

Stimmt - ich hatte schlicht das Image- gegen das CanvasGadget getauscht. Inzwischen hab ich startdrawing() und stopdrawing() aus der sub_zeichnen entfernt und um die die sub aufrufende Schleife gelegt. Da geht's inzwischen auch so schnell mit dem canvasgadget. Zumindest... erkenne ich das optisch nicht mehr wirklich als Unterschied. Die Zeit hab ich aber nicht gemessen.

So langsam verstehe ich wohl immer mehr, wie die 2D-Dinge zusammenhängen (könnten). :allright:
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Grafik wird "wegradiert"

Beitrag von ts-soft »

Bei Deiner Version mit dem ImageGadget ging es genauso langsam, bloß er wurde erst mit

Code: Alles auswählen

 SetGadgetState(image_ankf_hd,ImageID(img_ankf)) 
angezeigt und nicht bei StopDrawing()

Sind also alle Versionen beim Zeichnen gleich schnell, lediglich die Anzeige erfolgt woanders.
Und das man mit StartDrawing() und StopDrawing() sparen sollte, haste nebenbei auch noch gelernt :D

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
kartmanne
Beiträge: 108
Registriert: 19.03.2015 18:16
Wohnort: Altenstadt
Kontaktdaten:

Re: Grafik wird "wegradiert"

Beitrag von kartmanne »

HI,
Sind also alle Versionen beim Zeichnen gleich schnell,
ähnö. Vielleicht hab ich's unklar beschrieben.

Ich habe die sub routine (beinhaltend startdrawing() und stoppdrawing()) einmal mit dem imagegadget und einmal mit dem canvasGadget probiert. Die Gesamtzeit des Zeichenauftrags war bei der version "canvasgadget" deutlich länger.

Ich vermute (mit meinem gefährlichen Halbwissen ... :lol: ), dass das canvasgadget nach jedem Zeichenschritt selbst das gezeichnete Bild in den Anzeigebereich kopiert. Beim imagegadget wird dies nicht eigenständig gemacht (es muß durch den Programmierer per setgadgetstate() gemacht werden). Und das spart dem imagegadget eben viel Zeit.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Grafik wird "wegradiert"

Beitrag von ts-soft »

Wenn Du das Start/Stop Drawing nur am Anfang und Ende der gesamten Zeichenoperation ausführst, werden beide gleichschnell sein.
Du hast es ja nur verkehrt gemacht. Es stimmt schon, das beide gleich schnell sind, es ist ja schließlich derselbe Code. Du läßt in Dir bloß, aufgrund der Eigenschaften der Gadgets, unterschiedlich oft Anzeigen, bzw. das CanvasGadget macht dies automatisch.

Ein Start/Stop Drawing und dann anzeigen (bei Canvas autom.) und beide sind gleichschnell. Aufgrund des Doppelbuffering beim Canvas kann es natürlich eine minimale Zeit länger dauern, was aber kaum meßbar ist.

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten