Seite 2 von 3

Re: Einfaches Projekt zum Runterladen?

Verfasst: 07.05.2021 00:56
von Plenz
Eine kleine Frage noch: es scheint keinen Befehl zu geben, mit der man ein Image verkleinert/vergrößert auf einen Canvas zeichnet. Sehe ich das richtig?
Da ich das Original-Image nicht immer wieder nachladen möchte, muss ich es auf ein temporäres Image zeichnen, das temporäre Image verkleinern und dann auf den Canvas zeichnen. Oder geht das irgendwie eleganter?

Re: Einfaches Projekt zum Runterladen?

Verfasst: 07.05.2021 09:19
von mk-soft
;)
Result = ResizeImage(#Image, Width, Height [, Mode])

Um das alte Image zu behalten ist es besser ein neues Image zu erstellen (CreateImage) und in diesem das Image zu zeichnen (DrawImage(ImageID, x, y [, Width, Height]))

Oder noch einfacher. CopyImage -> ResizeImage

Re: Einfaches Projekt zum Runterladen?

Verfasst: 07.05.2021 13:45
von Plenz
Da steht die Lösung, ich hatte sie komplett übersehen: mit [, Width, Height] kann man vergrößern und verkleinern.

Re: Einfaches Projekt zum Runterladen?

Verfasst: 12.05.2021 00:11
von Plenz
die Prüfung des Rückgabe wertes macht sinn.
Hab ich inzwischen auch gemerkt. Vor allem scheint es mir, dass Fonts nicht immer geladen werden.
Aber warum nicht? Warum geht etwas nicht, was sonst geht?

Und vor allem: wenn ein Fehler auftritt, was tut man dann? Einfach den gescheiterten Aufruf so lange wiederholen, bis er funktioniert?

Re: Einfaches Projekt zum Runterladen?

Verfasst: 12.05.2021 01:10
von Axolotl
Die Frage ist nicht so einfach zu beantworten. Warum etwas nicht mehr funktioniert hängt von der jeweiligen Funktion und Situation ab. Z.B. kann der exklusive Zugriff auf eine Datei verweigert werden. Dann geht es natürlich darum das im Programm alles richtig läuft.
Hier kann tatsächlich das wiederholen helfen, wenn der oder die andere Anwender oder Anwendung seinen Zugriff beenden.
Unter Windows wird eigentlich immer ein Font geladen, da habe ich seit Windows 3.1 eher selten Ressourcen Probleme. (Damals waren die Anzahl der Brush, Pen, etc. Sehr begrenzt.) Manchmal kann eine Fehlermeldung mit dem MessageRequester helfen.

Re: Einfaches Projekt zum Runterladen?

Verfasst: 12.05.2021 02:10
von Plenz
Also ganz einfach

Code: Alles auswählen

Repeat
  FontNr = LoadFont(#PB_Any, "Arial", 24)
Until FontNr > 0
oder spricht etwas dagegen?

Re: Einfaches Projekt zum Runterladen?

Verfasst: 12.05.2021 08:09
von HeX0R
Ich hatte noch nie den Fall, dass ein Font nicht geladen wird, die Schleife ist daher unnötig und auch noch falsch!
Der Rückgabewert, wenn Du #PB_Any nutzt, ist eine Memoryadresse, die kann aber (wegen den signed Variablentypen von PB) auch negativ sein.

Re: Einfaches Projekt zum Runterladen?

Verfasst: 12.05.2021 09:22
von Mijikai
Plenz hat geschrieben: 12.05.2021 02:10 Also ganz einfach

Code: Alles auswählen

Repeat
  FontNr = LoadFont(#PB_Any, "Arial", 24)
Until FontNr > 0
oder spricht etwas dagegen?
Bei Windows wird immer eine Font (System-Font) geladen (wenn ich mich recht erinnere).
Dabei ist nicht klar (ohne weitere OS Apis) ob die angeforderte Font tatsächlich geladen wurde.

Re: Einfaches Projekt zum Runterladen?

Verfasst: 12.05.2021 13:01
von Plenz
Danke für den Hinweis auf negative Nummern! :allright:

Ich schreibe ein Programm, das unter Windows und Linux Mint laufen soll. Beim Erstellen bzw. Benutzen eines Fonts kommt es immer wieder zu Abstürzen, vor allem unter Linux, aber auch unter Windows.
Mein Verdacht richtet sich momentan auf die Größe der Font-Nummer bzw. Font-ID. Ich habe sie in einem Word gespeichert, das reicht wohl nicht, ich werde einfach mal Quad benutzen.

Re: Einfaches Projekt zum Runterladen?

Verfasst: 12.05.2021 13:56
von mk-soft
Plenz hat geschrieben: 12.05.2021 02:10 Also ganz einfach

Code: Alles auswählen

Repeat
  FontNr = LoadFont(#PB_Any, "Arial", 24)
Until FontNr > 0
oder spricht etwas dagegen?
So programmiert man sehr schön ein Speicherleck.
Objekte die #PB_Any angelegt werden müssen explizit mit Free Objekt wieder freigegeben werden.
FontPB = LoadFont(#PB_Any, ...) -> FreeFont(FontPB).

Es wird nur beim beenden vom Programm die Objekte intern wieder Freigegeben.

Code: Alles auswählen

For i = 1 To 10
  FontNr = LoadFont(#PB_Any, "Arial", 24)
  Debug "Dynamik FontNr: " + FontNr + " / OS Handle: " + FontID(FontNr)
Next