Runtime Error "CreateBitmapFromWicBitmap)

Meine Anwendung produziert (nur unter Windows) folgende Fehlermeldung:

Hat jemand eine Idee, woran das liegt und wie man das behebt?

In der IDE wird das nicht abgefangen und auch nicht angezeigt, wo der Fehler liegt. Auf meinem Mac luft es tadellos.

Ich konnte die Fehlerstelle eingrenzen auf diese Zeile (in einem PaintEvent eines Canvas):
g.drawpicture Schmuckgrafik, 0, 0, g.width, g.Height, 0, ScrollBar1.Value25, Schmuckgrafik.width, me.Heighti

Schmuckgrafik ist nicht Nil und hat eine Gre von 2422x8980 Pixel (Width x Hight)
i=3,3826815642458099 (Double)
g (Graphics vom Canvas) = 716 x 480 (Width x Hight)

Xojo 19r1.1 mit mbs Plugins 19.3

Gru, Stefan Mettenbrink.

Ist Dein Bild vielleicht zu gro fr Windows?

Ab wann ist es für Windows zu groß?
Was kann ich dagegen unternehmen?

Wäre schön, wenn Xojo das erkennen und passend reagieren würde.

Bitte kleines Beispiel machen und mit Feedback melden.

Da sollte eine Exception kommen, wenn es nicht geht.

Ich habe mal ein Beispiel erstellt und auch gleich einen Fix gefunden:
link text

Ich habe für den Fix ein LocalPicture in Größe des Canvas erzeugt.
Dann wurde das große Picture in das LocalPicture gezeichnet (problemlos). Danach konnte ich das LocalPicture in das Graphics vom Canvas ausgeben.

Kann das mal jemand prüfen?
Dann kann ich es ja als Feedback melden.

Das ist eine gute Idee - zumindest für TargetWindows.

Ein bekanntes Problem bei der Direct2D Implementation von Xojo ist, dass Bilder einen enormen Bedarf an Arbeitsspeicher haben…
Ein anderer gemeldeter Effekt (wohl ähnlich wie dem hier) ist <https://xojo.com/issue/54421>. Dort beschriebene Workarounds könnte hilfreich sein, wenn so grosse Bilder über längere Zeit in der Anwendung gehalten werden…

Leider gibt es bei Xojo (meist) keine schöne “Out Of Memory” Meldung… das Resultat ist dann entweder ein Absturz oder so eine kryptische Meldung wie “Runtime Error (CreateBitmapFromWicBitmap)”.

Danke, das Problem sieht man direkt hier.

Und habe es bei <https://xojo.com/issue/54398> hinzugefügt.

Hallo Stefan,
ich habe unter MAC deine Paint Routine gendert.
Dein Beispiel hat eine Scrollbar1 mit Maximum 100 * 25 nie das Bildende erreicht / Scrollbar.livescroll auf True

Dim i As Double
If Schmuckgrafik<>Nil Then
if me.Height>=Schmuckgrafik.Height then
g.drawpicture Schmuckgrafik,0,0,g.width,Schmuckgrafik.Height,0,0,Schmuckgrafik.width,Schmuckgrafik.Height
else
i=Schmuckgrafik.Width/Canvas1.Width
ScrollBar1.maximum = Schmuckgrafik.height-canvas1.Heighti // Anzeige bis Ende
g.drawpicture Schmuckgrafik,0,0,g.width,g.Height,0,ScrollBar1.Value,Schmuckgrafik.width,Me.Height
i // * 25 gelscht
End
end

Hallo Rolf,
danke für den Hinweis.
Ich habe im Code des Hauptprojektes nachgesehen. Dort funktioniert es.
Demnach scheint es ein Problem im Beispielprojekt zu sein.