Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Bitmap.LoadThumbnailFromFile : Bitmap zu groß nach TMemoryStream (https://www.delphipraxis.net/207189-bitmap-loadthumbnailfromfile-bitmap-zu-gross-nach-tmemorystream.html)

stalkingwolf 2. Mär 2021 17:07

Bitmap.LoadThumbnailFromFile : Bitmap zu groß nach TMemoryStream
 
Android :
Ich habe ein etwas merkwürdiges Verhalten von der Funktion TImage.bitmap.LoadThumbnailFromFile nachdem ich mit TMemoryStream eine Datei erstellt habe.

Nachdem ich per folgendem Code eine Datei speichere
Code:
     
InputStream := SharedActivity.getContentResolver.openInputStream(Data.getClipData().getItemAt(z).getUri);

b          := TJavaArray<Byte>.Create(InputStream.available);
ms         := TMemoryStream.Create;

InputStream.read(b);
ms.Write(b.Data^, b.Length);
ms.SaveToFile( filename );
ms.Free;
b.Free;
InputStream.close;
kann ich mit
Code:
img := TImage.Create(nil);
try
    img.Bitmap.LoadThumbnailFromFile(filename,75,75);
Kein Thumbnail davon generieren.
Es wird die Exception "Bitmap zu groß" ausgeworfen.

Allerdings ist die Datei korrekt. Ich hab mir die Filesize ausgeben lassen und wenn ich danach auf die Datei zugreife ( andere Funktion ) oder per Explorer auf das Tablet, dann ist die Datei vollkommen in Ordnung.

TurboMagic 2. Mär 2021 20:35

AW: Bitmap.LoadThumbnailFromFile : Bitmap zu groß nach TMemoryStream
 
Ich gehe davon aus, dass du schon mit einer anderen
Datei und auch auf dem PC gegengecheckt hast?

stalkingwolf 3. Mär 2021 08:32

AW: Bitmap.LoadThumbnailFromFile : Bitmap zu groß nach TMemoryStream
 
Zitat:

Zitat von TurboMagic (Beitrag 1484290)
Ich gehe davon aus, dass du schon mit einer anderen
Datei und auch auf dem PC gegengecheckt hast?

Ja ich habe es mit diversen Dateien ausprobiert
und am PC kann ich es nicht gegenprüfen, weil der Quellcode Android only ist.
Auf dem PC ist die Logik viel simpler, weil ich direkt auf die Dateien zugreifen kann.

Edit : das Problem ist viel schräger als gedacht.

Das reine öffnen der Imagebrowser reicht das es nicht mehr funktioniert. Sogar auf Dateien welche schon vorhanden sind.

d.h

Code:
FMessageSubscriptionID := TMessageManager.DefaultManager.SubscribeToMessage (TMessageResultNotification, HandleActivityMessage);

RequestCode := 0;
Intent := TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_PICK);
intent.setType(StringToJString('image/*'));
intent.setAction(TjIntent.JavaClass.ACTION_GET_CONTENT);
Intent.putExtra(TJIntent.JavaClass.EXTRA_ALLOW_MULTIPLE,true);

ResolveInfo := SharedActivity.getPackageManager.resolveActivity(Intent, 0);
if ResolveInfo <> nil then SharedActivity.startActivityForResult(Intent, RequestCode);
Damit wird der Bildbrowser geöffnet. Komme ich davon zurück wird folgendes aufgerufen
Code:
procedure TFmain.HandleActivityMessage(const Sender: TObject; const M: TMessage);
begin

end;
Greife ich darin auf meine Bilder zu, welche schon vorhanden sind, dann wirft TImage immer eine Exception aus.
D.h ich muss mit dem Resultat nicht einmal was machen. Das reine öffnen reicht.

[/code]

Sinspin 3. Mär 2021 13:46

AW: Bitmap.LoadThumbnailFromFile : Bitmap zu groß nach TMemoryStream
 
Vieleicht ist die wirkliche Exception eine andere?
Könnte es sein das es nicht möglich ist auf die Datei zuzugreifen? Geänderte Rechte? Offenes Handle?

stalkingwolf 3. Mär 2021 13:53

AW: Bitmap.LoadThumbnailFromFile : Bitmap zu groß nach TMemoryStream
 
Das dachte ich zuerst auch. Aber da es nun sogar auf Dateien passiert welche schon ewig dort liegen, kann ich mir das nicht vorstellen.
Es passiert sobald ich die activity Action ACTION_GET_CONTENT nutze.
Dann wird das Fenster angezeigt, die Notification ausgelöst und wenn ich innerhalb dieses Vorgangs auf Dateien zugreife erhalte ich die Exception. Sobald ich direkt danach darauf zugreife z.b manuell in der APP ist alles ok.

Ich habe das nun abgebrochen. Anwender sieht nun erstmal keine Thumbnail, weil das kostet mich gerade arg viel Zeit.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:45 Uhr.

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