Bonjour à tou(te)s
Un problème m'empoisonne la vie même pendant mes vacances.
J'ai une application FMX qui fonctionne bien sous Windows mais pas sous IOS et impossible de comprendre pourquoi.
L'application choisit une image dans la bibliothèque d'images du téléphone sous IOS ou une image avec un chemin fixe sous Windows (Windows ne sert que de test).
L'image est affichée dans un TListBox et est tout à fait correcte.
L'image est convertie en TBytesArray et sauvée dans un champ blob d'une base SQLite.
Dans un second temps, le tableau d'octets est rechargé depuis la base.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 with FDCommand1.Params do begin ParamByName('IDPJ').AsInteger := IDPJ; ParamByName('Nom').AsString := ''; ParamByName('Embeded').AsBoolean := False; ParamByName('Contenu').LoadFromStream(Bts, ftBlob); end; FDCommand1.Execute;
Ensuite, pour vérifier si le tableau est correct, je recrée le TBitmap:
Code : Sélectionner tout - Visualiser dans une fenêtre à part Bts := QPJs.FieldByName('Contenu').AsBytes;
Sous Windows, aucun problème !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Bt := TBytesStream.Create(Bts); Bt.Position := 0; try Bmp := TBitmap.CreateFromStream(Bt); {$IFDEF MSWINDOWS} Bmp.SaveToFile('g:\temp\bitmap.jpg'); // sous Windows juste pour vérifier visuellement {$ENDIF} except on E:Exception do ShowMessage(E.Message); end;
Sous IOS: Le chargement du bitmap a échoué.
Par un jeu de sauvegarde temporaire, j'ai comparé le tableau d'octets avant sa mise en base de données et après son rechargement.
Sous Windows ou IOS, les tableaux sont identiques.
Le code est le même pour les 2 OS.
Impossible de comprendre pourquoi IOS donne un résultat en échec.
Dans un premier temps, au rechargement sous IOS, mon tableau d'octets était doublé avec un bit à 0 entre chaque octet.
J'ai tenté de recréer un tableau en supprimant tous ces 0 mais ça n'a rien changé.
Ensuite, j'ai changé le paramètre StringFormat de la connexion Firedac en stANSI.
Là, plus d'octet superflu à 0 mais le chargement du bitmap échoue aussi.
J'arrive à un stade où je ne sais plus quoi essayer.
Et le client commence à s'impatienter ... :-(
Si quelqu'un a une idée sur la cause du problème, ça me dépannerait grandement ...
Partager