Fehler in Testprogramm Package BGRABitmap

Rund um die LCL und andere Komponenten
Antworten
Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1535
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Fehler in Testprogramm Package BGRABitmap

Beitrag von fliegermichl »

Ich wollte eben das Testprogramm vectorize aus dem Package BGRABitmap ausführen.
Da tritt eine Exception "FLT INVALID OPERATION" in der Datei BGRAFillInfo.pas auf.
Die betreffende Programmzeile ist

Code: Alles auswählen

function TFillEllipseInfo.GetBounds: TRect;
begin
  Result := rect(floor(fx - frx), floor(fy - fry), ceil(fx + frx), ceil(fy + fry));
end;
Was kann an den Parametern für floor bzw. ceil falsch sein um diese Exception auszulösen?

Edit: und vor allem kann ich machen was ich will. Das ganze in einen try except end block packen. Ich kann diese Exception nicht verhindern.

wp_xyz
Beiträge: 5049
Registriert: Fr 8. Apr 2011, 09:01

Re: Fehler in Testprogramm Package BGRABitmap

Beitrag von wp_xyz »

Ich hab's mal mit der OPM-Version probiert, da kommt derselbe Fehler in TFMain.BGRAVirtualScreenRedraw, Bitmap.EllipseAntialias - da steht am Index 4 des pts-Array ein unsinniger Wert (-3.4E38). Dasselbe Verhalten habe mit der github-Version.

Ich denke, du solltest das Problem auf dem GitLab-BugTracker von BGRABitmap melden.

Benutzeravatar
Roland Chastain
Beiträge: 160
Registriert: Sa 7. Jul 2012, 21:50
Wohnort: Saargemünd
Kontaktdaten:

Re: Fehler in Testprogramm Package BGRABitmap

Beitrag von Roland Chastain »

Fehlerfreie Kompilierung bei mir (Linux Mageia, Lazarus 3.4, BGRABitmap v11.6.3).
Petit poisson deviendra grand,
Pourvu que Dieu lui prête vie.

wp_xyz
Beiträge: 5049
Registriert: Fr 8. Apr 2011, 09:01

Re: Fehler in Testprogramm Package BGRABitmap

Beitrag von wp_xyz »

Ich habe den Fehler von obiger Position aus weiter verfolgt und komme nun auch in die im 1.Post erwähnte Zeile

Code: Alles auswählen

  Result := rect(floor(fx - frx), floor(fy - fry), ceil(fx + frx), ceil(fy + fry));
fx und fy haben im Fehlerfall den Wert -3.4E38, frx und fry sind in Gegend von 1. Summe und Differenz der beiden überschreiten bei weitem den Integer-Wertebereich. Die Anwendung als Argument in den Floor und Ceil-Funktionen, die ja Integer-Werte zurückgeben sollen, führt in Windows zu der "INVALID OPERATION". Warum das unter Linux gutgeht, weiß ich nicht.

Eine Möglichkeit zur Fehlerbehebung wäre, lokale Varianten der floor() und ceil()-Funktionen zu schreiben, die sicherstellen, dass der Integer-Bereich nicht überschritten wird:

Code: Alles auswählen

function floor(x: single): Integer;
begin
  if x < -MaxInt-1 then
    Result := -MaxInt-1
  else if x > MaxInt then
    Result := MaxInt
  else
    Result := math.Floor(x);
end;

function ceil(x: single): Integer;
begin
  if x < -MaxInt-1 then
    Result := -MaxInt-1
  else if x > MaxInt then
    Result := MaxInt
  else
    Result := math.Ceil(x);
end; 

function TFillEllipseInfo.GetBounds: TRect;
begin
  Result := rect(floor(fx - frx), floor(fy - fry), ceil(fx + frx), ceil(fy + fry));
end; 

Benutzeravatar
Roland Chastain
Beiträge: 160
Registriert: Sa 7. Jul 2012, 21:50
Wohnort: Saargemünd
Kontaktdaten:

Re: Fehler in Testprogramm Package BGRABitmap

Beitrag von Roland Chastain »

Entschuldigung, ich habe zu schnell gelesen. Ich dachte, wir reden über einen Kompilierungsfehler. :oops:
Allerdings bestätige ich, dass das Programm bei mir fehlerfrei läuft.
Petit poisson deviendra grand,
Pourvu que Dieu lui prête vie.

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1535
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Fehler in Testprogramm Package BGRABitmap

Beitrag von fliegermichl »

wp_xyz hat geschrieben: Mi 27. Nov 2024, 23:15 Ich habe den Fehler von obiger Position aus weiter verfolgt und komme nun auch in die im 1.Post erwähnte Zeile
...
Vielen Dank!
Diese Lösung funktioniert. Wieso kann man den Fehler aber nicht mit einem try except Block abfangen?

Antworten