Bitmap too large to be uploaded into a texture

  • Hallo Leute,


    ich arbeite gerade an einer App, die auch Bilder anzeigt. Auf der Galaxy S2 wurden diese auch angezeigt, auf dem LG Optimus P880 (welches eine bessere Auflösung hat) bekomme ich im LogCat die Meldung:


    08-28 14:18:10.023: W/OpenGLRenderer(20744): Bitmap too large to be uploaded into a texture (1147x2565, max=2048x2048)


    Den Layout habe ich so geschrieben, so dass man bei den Bildern nach rechts-links und nach oben-unten scrollen kann, damit die Texte gut lesbar erscheinen. Wie kann man dieses Problem denn umgehen, so dass es auf allen endgeräten läuft? Muss ich die Bilder verkleinern oder kann man programmiertechnisch was anpassen?


    Danke im Voraus

  • Hallo leute,


    also irgendwie verstehe ich nicht soo ganz den Umgang mit den verschiedenen drawable-ordnern. Ehrlich gesagt habe ich verständnisprobleme und mein englisch ist auch nicht so der knüller sodass ich den Inhalt dieses Links:

    HTML
    http://developer.android.com/guide/practices/screens_support.html

    checke.


    Also was ich verstanden hab ist, wenn man icon verwenden möchte, sollte man verschiedene auflösungen in die separaten ordner packen. Für die Performance wäre das ja besser, ansonsten müsste das System, wenn man nur ein icon in eines der drawable-ordner hat, diesen dementsprechend skalieren, was die qualität dementsprechend beeinflussen würde. So weit richtig??


    Wie sieht das denn mit normalen .jpg's aus? Also keine icons. Inzwischen gibt es nun 5 drawable-ordner wenn man ein neues projekt anlegt: ldpi-mdpi-hdpi-xhdpi-xxhdpi.
    Ich habe diesen thread ja deswegen geöffnet, weil ich mit der darstellung einiger .jpg's probleme hatte. Nun, ich ich habe zwar gepostet, das es geregelt ist, aber was ich getan habe ist nur, diese in eines der jeweligen drawable-ordner zu packen. Dann ging es. Um es klarer für euch zu schildern, ich habe 5 bilder mit den jeweiligen Auflösungen: 860x1924, 859x2700, 859x2228, 859x1807 und 859x739.
    Zu beginn hatte ich diese bilder nur im drawable-hdpi ordner abgelegt und hatte vor diese über eine imageview anzuzeigen. Das Layout, indem die imageview enthalten ist, habe ich mit einer horizontalen und vertikalen scrollview erweitert, damit die Bilder in der originalen größe gut lesbar sind. So, getestet habe ich es dann auf der S2, die Bilder wurden geladen und ich konnte problemlos diese nach rechts-links-oben-unten scrollen, um den restlichen Inhalt zu sehen. Wie im 1. post bereits gesagt, hat das auf dem LG optimus p880 nicht funktioniert (nur das bild mit 859x739 pixel wurde angezeigt, der rest nicht). Meldung war dementsprechend "Bitmap too large to be uploaded into a texture...". Dann habe ich diese dann in den xhdpi ordner abgelegt und es wurden dann alle bilder auf dem LG angezeigt. Aber die großen bilder konnte man dann nicht zu den seiten scrollen (nur nach unten-oben) bzw. wurden diese halt etwas kleiner angezeigt. Dadurch wurden diese nicht mehr so gut leserlich. Was ich mich frage ist jetzt, sollte/müsste ich die bilder auch in verschiedenen Auflösungen in den separaten ordnern bereitstellen (sowie bei den icons)? Bis min/max. welcher größe sollten die Bilder in den jeweiligen ordnern sein? Von der Breite her sind meine ja max. 860pixel groß. Nur die länge varriiert halt. Und das wollte ich halt mit dem Scrollview umgehen, was ja leider net gefunzt hat :(


    Was genau passiert in mit den Bildern in den verschiednen drawalbe ordner? Werden dei vergrößert /verkleinert??
    Der oben gepostete Link enthält bestimmt meine verlangten antworten, aber wie gesagt, finde ich die quelle ziemlich unübersichtlich, zu viele zahlen und viele bezeichnungen (dpi, dp.....). Ich verstehe echt nur bahnhof. Könntet ihr mir das so leicht und verständlich wie möglich erklären? Das wäre echt super korrekt. :-[
    Was ich will ist nur, bilder in hoher auflösung für jedes android-gerät anzuzeigen.

  • Dein Problem ist, dass die Implementierung deines Android maximal 2048x2048 Pixel große Bilder zulässt.
    Das scheint ein 'Feature' von LG zu sein, das Nexus 4 von LG macht es ganz genau so.


    Das bedeutet, dass deine Grafik mit den 2228 und 2700 Pixeln Breite einfach zu groß ist, als dass die Implementierung des OpenGL Renderers sie laden möchte.
    Und dagegen kannst du nichts machen.


    Du musst also irgendwie dafür sorgen, dass deine Grafiken maximal 2048x2048 Pixel groß sind. Eventuell teilst du die Grafiken einfach mit ImageMagick in 2 Hälften oder sowas.

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • Hallo Lucas,


    danke für deine Antwort.


    Hmm... ich verstehe, ok. Aber welche größen sollten denn nun die Bilder in den jeweiligen Ordner haben? Wenn ich das jetzt auf 2048 pixel verkleinere, dann wäre das für das LG-Gerät auch geregelt. Was, wenn die 2048 Pixel aber für andere Geräte zu groß wäre? Ich möchte ja soviele geräte abdecken wie möglich. Wie sollte man da vorgehen?

  • Also im Allgemeinen schwören ja alle auf kleine Bilder.
    Du könntest halt wie gesagt 25x 100px nehmen und kacheln. Dann ist es egal, wie groß die Texturen sein dürfen.


    Oder du belässt es dabei, fängst die Exception ab, hoffst von der Exception die Informationen für die maximale Größe zu bekommen und lädst dann eine kleinere, passendere Version.

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!