Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Bitmap Android zu groß (https://www.delphipraxis.net/211947-bitmap-android-zu-gross.html)

skoschke 25. Nov 2022 08:39

Bitmap Android zu groß
 
Hallo,

für die Darstellung eines Lastgangs erstelle ich ein Bitmap, welches je nach Anzahl anzuzeigender Werte und Breite eines Wertes sehr breit werden kann...

Dann bekomme ich "Bitmap zu groß" als Fehlermeldung.

Nun habe ich eine Funktion gebaut, welche die maximal mögliche Größe ermitteln soll, so etwa:

Delphi-Quellcode:
  h := 1500; //Fix
  i := 105;
  while i <> 0 do
  begin
    i := i - 5;
    try
      w := i / 10 * length(LP) + 20;
      testbmp := TBitmap.create(trunc(w), trunc(h));
      break;
    except
      // Fehler abgefangen
    end;
  end;
Das funktioniert auch, doch braucht das Erstellen des Bitmaps je nach Größe bis zu 3 sec bis der Error kommt und die nächstkleinere Variante probiert wird.
Gibt es eine direkte Funktion die maximale Größe eines Bitmaps im System abzufragen?

Ciao
Stefan

TiGü 25. Nov 2022 11:00

AW: Bitmap Android zu groß
 
Delphi-Quellcode:
var
    bmp: TBitmap;
begin
    bmp := TBitmap.Create(16, 16);
    Caption := bmp.Canvas.GetAttribute(TCanvasAttribute.MaxBitmapSize).ToString;
    bmp.Free;
end;
Je nach verwendeter Canvas-Klasse ergeben sich andere Werte.
Auf Windows ist der Wert für TCanvasD2D für MaxBitmapSize gleich 8192, für den TCanvasGpu mit TCustomDX11Context ergibt sich ab FeatureLevel = D3D_FEATURE_LEVEL_11_0 (FeatureLevel abhängig davon, was die GPU unterstützt) der Wert 16384.

Android verwendet wahrscheinlich dann den TCustomContextOpenGL? Dann erhält du den Wert für GL_MAX_TEXTURE_SIZE.
Siehe auch: https://stackoverflow.com/questions/...e-texture-size

skoschke 25. Nov 2022 11:20

AW: Bitmap Android zu groß
 
Prima, danke, das klingt vielversprechend!

Auf einem Galaxy S10+ bekomme ich 16383 und auf einem Galaxy Tab A 8192.

Was sollen mir nun diese Werte in Bezug auf die maximale Breite und Höhe des Bitmap sagen?

Ciao
Stefan

TiGü 25. Nov 2022 13:41

AW: Bitmap Android zu groß
 
Huch, merke gerade, ich hatte im vorigen Post einen Satz nicht zuende geschrieben.

Ich interpretiere diesen Wert als maximal möglichen Wert für Höhe und Breite einer 2D-Texture, also deines Bitmaps.

skoschke 26. Nov 2022 08:12

AW: Bitmap Android zu groß
 
Prima, vielen Dank!

Scheint zu funktionieren, ich passe die maximale Schrittweite für das Zeichnen eines Wertes nun anhand der Länge des Lastprofilarrays an, "Bitmap zu groß" habe ich nun nicht mehr bekommen :-)
Und das geht vieeeel schneller als das erfolglose Testen der Bitmaperzeugung...

Ciao
Stefan


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:21 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz