AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung Bitmap.LoadThumbnailFromFile : Bitmap zu groß nach TMemoryStream
Thema durchsuchen
Ansicht
Themen-Optionen

Bitmap.LoadThumbnailFromFile : Bitmap zu groß nach TMemoryStream

Ein Thema von stalkingwolf · begonnen am 2. Mär 2021 · letzter Beitrag vom 3. Mär 2021
Antwort Antwort
stalkingwolf

Registriert seit: 6. Mai 2011
540 Beiträge
 
#1

Bitmap.LoadThumbnailFromFile : Bitmap zu groß nach TMemoryStream

  Alt 2. Mär 2021, 17:07
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.
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.942 Beiträge
 
Delphi 12 Athens
 
#2

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

  Alt 2. Mär 2021, 20:35
Ich gehe davon aus, dass du schon mit einer anderen
Datei und auch auf dem PC gegengecheckt hast?
  Mit Zitat antworten Zitat
stalkingwolf

Registriert seit: 6. Mai 2011
540 Beiträge
 
#3

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

  Alt 3. Mär 2021, 08:32
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]

Geändert von stalkingwolf ( 3. Mär 2021 um 09:23 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sinspin
Sinspin

Registriert seit: 15. Sep 2008
Ort: Dubai
681 Beiträge
 
Delphi 10.3 Rio
 
#4

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

  Alt 3. Mär 2021, 13:46
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?
Stefan
Nur die Besten sterben jung
A constant is a constant until it change.
  Mit Zitat antworten Zitat
stalkingwolf

Registriert seit: 6. Mai 2011
540 Beiträge
 
#5

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

  Alt 3. Mär 2021, 13:53
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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:25 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