![]() |
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:
kann ich mit 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;
Code:
Kein Thumbnail davon generieren.
img := TImage.Create(nil);
try img.Bitmap.LoadThumbnailFromFile(filename,75,75); 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. |
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? |
AW: Bitmap.LoadThumbnailFromFile : Bitmap zu groß nach TMemoryStream
Zitat:
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:
Damit wird der Bildbrowser geöffnet. Komme ich davon zurück wird folgendes aufgerufen
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);
Code:
Greife ich darin auf meine Bilder zu, welche schon vorhanden sind, dann wirft TImage immer eine Exception aus.
procedure TFmain.HandleActivityMessage(const Sender: TObject; const M: TMessage);
begin end; D.h ich muss mit dem Resultat nicht einmal was machen. Das reine öffnen reicht. [/code] |
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? |
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 10:55 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz