Picture exceeds max size of 16384

Hallo in die Runde.
Ich bekam die im Betreff angegebene Fehlermeldung (Windows). Leider ist der Wert ohne Einheit angegeben.

Es betrifft folgenden Code (Druck eines großen Bildes auf mehrere Seiten):

dim i,j,bis1,bis2,w,h,wf,hf as integer
dim firstprint as Boolean
dim gp as Graphics

gp=OpenPrinterDialog(ps)

if gp<>nil then
  firstprint=true
  w=gp.width
  h=gp.height
  wf=pi.Width
  hf=pi.Height
  h=h/Zeilenhoehe
  h=h*Zeilenhoehe
  bis1=hf\h
  bis2=wf\w
  
  for i=0 to bis1//Höhe
    for j=0 to bis2//Breite
      if firstprint=false then
        gp.NextPage
      else
        firstprint=false
      end
      gp.DrawPicture Pi,0,0,w,h,j*w,i*h,w,h
    next
  next
end

Bei DrawPicture kommt es mit folgenden Werten zu besagtem Fehler:
i=0
j=0
w=3781
h=5760
hf=18080
wf=5120

Damit vermute ich mal, dass die maximale Größe 16384 Pixel sein sollen (kann das einer bestätigen?).
Was kann ich tun, um das Bild dennoch ausgeben zu können?

Offenbar hat Windows ohnehin Probleme mit großen Bildern. Wie kann ich unter Windows Bilder mit 20.000 oder 30.000Pixel erzeugen und drucken (oder zumindest als Bild sichern)? Gar nicht?

Leider gab es bisher keine Lösung.
Hier noch mal den aktuellen Stand:
Ich bekomme unter Windows beim Ausführen des Codes:
gp.DrawPicture PLokal,0,0,w,h,j*w,i*h,w,h
wobei:
i und j = 0
w = 4956
h = 6880
PLokal ist eine 32-Bit Grafik mit height=32000 und width=6720

die Fehlermeldung:
UnsupportetOperationException
Picture exceeds max size of 16384

Unter macOS ist das kein Problem. Wo ist mein Fehler?
Oder Besser, wie kann ich das ändern, dass der Code unter Windows funktioniert?

Ich glaube, 32767 ist die maximale Größe (16384 für Breite oder Höhe), die ein Bild unter Windows haben kann. Ich weiß nicht, ob das eine von Xojo oder der API auferlegte Beschränkung ist. Ich weiß nicht, wie man das umgehen kann, und ich kann mich auch nicht daran erinnern, dass dies zu 100% die Ursache ist, da ich noch nie mit einem so großen Bild gearbeitet habe.

Hoffentlich meldet sich jemand, der das schon einmal erlebt hat, oder einer der Techniker.

Übersetzt mit DeepL Translate: The world's most accurate translator (kostenlose Version)

@Geoff_Perlman

Ich konnte gerade in Gimp ein Bild mit der Größe von 35000x35000 Pixel anlegen (11,5GB).
Ein grundsätzliches Problem scheint es dann ja nicht zu sein.

Ich meinte nicht, dass es sich um ein Windows-weites Problem handelt, aber es könnte ein Problem mit der API sein, die sie zum Erstellen und Verwalten von Bildobjekten auf Betriebssystemebene verwenden. Wie auch immer, es scheint eine harte Grenze für die Bildgröße in Windows von Xojo-Anwendungen zu geben. Ich nehme an, dass Sie irgendeine Art von großen Objekten für Banner oder ähnliches drucken, sonst würde ich vorschlagen, die Größe des Eingabebildes zu beschränken. Ich hoffe immer noch, dass einer der Techniker hier einspringen und helfen wird, da ich nicht wirklich von mehr Nutzen sein kann mit diesem.

Übersetzt mit DeepL Translate: The world's most accurate translator (kostenlose Version)

OK, ich habe gerade mit @Geoff_Perlman darüber gesprochen. Sie prüfen gerade, ob es sich um eine selbst auferlegte Einschränkung handelt, die nicht mehr notwendig ist. Wenn ich etwas höre, werde ich hier Bericht erstatten.

OK, das ist offenbar eine Einschränkung der Direct2D-Engine in Windows, und nichts, was sie schnell beheben können. Ich habe @Christian_Schmitz angerufen, um zu sehen, ob er helfen kann.

Zum Hintergrund.
Es handelt sich um die Ausgabe einer Listbox (in den Zeilen ist nicht nur Text sondern auch Grafik). Die Breite ist vermutlich selten problematisch. Allerdings können es viele Hundert bis mehrere Tausend Zeilen werden. Die werden dann auf mehrere A4 Seiten verteilt (auch in der Breite).
Der Code funktioniert auf dem Mac problemfrei. Ohne die Fehlermeldung, die nur auf Windows kommt. (Linux habe ich noch nicht getestet).

ah ok.
dann würde ich evtl. die Listbox Zeilen einzeln als Bild (oder Text & Bild) ausgeben.

That is a check that Xojo does. The reason may be some APIs used on macOS, Windows or Linux, which can’t do much.

You could use GMImageMBS class in MBS Xojo Plugins to load image and scale it down to make it usable. Or of course our PictureMBS class can help here, too.

Die Überlegung, die Ausgabe auf mehrere Bilder zu verteilen hatte ich auch schon.

Wie mir PictureMBS hier helfen kann habe ich noch nicht verstanden. Der Fehler kommt ja in der Zeile
gp.DrawPicture PLokal,0,0,w,h,jw,ih,w,h

Hier wird ja über OpenPrinterDialog auf den Drucker ausgegeben. Das Bild PLocal entspricht dem übergebenem Bild (zuvor gibt es die Zeile PLocal=Pi, wobei Pi Parameter der Methode ist). Demnach ist das ursprüngliche (auszugebende) Bild nicht das Problem.

Tja, aber wenn Xojo keine Bilder über 16000 Breite/Höhe haben will, dann teil das Bild auf und zeichne halt 4 Teile statt einem großen.

Wie genau hast Du das gemacht bzw. wie ist dieses übergroße Bild entstanden?

In einer übergeordneten Methode wird es erzeugt:

Pi=MyNewPicture(i,ListBox2.ListCount*Zeilenhoehe,32)
if Pi<>nil then g=pi.Graphics

Dann werden die Zeilen “hinein gemalt”. Abschließend wird das Bild dann an die Druckroutine übergeben und dort, wie anfänglich gezeigt, ausgegeben.

Du könntest ein temporäres Bild erzeugen mit den Maßen, in denen du Zeichen willst zum Drucken und dann dieses temporäre Bild beim Drucken zeichnen.
Dadurch kommt das skalieren vor der Übergabe zum Drucker.

Ja, das habe ich auch überlegt und versucht. Das führt unter Windows zumindest nicht mehr zu einem Fehler, aber die erzeugte PDF-Datei (ich habe eine PDF-Drucker genutzt) zeigte nicht alle Seiten.
Daraufhin habe ich mir das auf dem Mac angesehen und feststellen müssen, dass ab einem bestimmten Vergrößerungsfaktor nicht mehr das komplette Ursprungsbild ausgegeben wird.

Also gehe ich erst mal davon aus, dass Dein Vorschlag hilft und die Fehlermeldung unterbleibt.

Jetzt muss ich nur noch herausfinden, wieso unter bestimmten Umständen (Vergrößerungsfaktor der Ausgabe) nicht alles ausgegeben wird.

Soweit erst mal vielen Dank für die Unterstützung!