Bonjour,
Je me suis codé un helper sur TBitmap pour l'avoir en TJSONArray et pour le récupérer ensuite à partir du TJSONArray.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
function TBitmapHelper.AsJSONArray: TJSONArray;
var
St: TBytesStream;
Bts: TArray<byte>;
I: Integer;
begin
St := TBytesStream.Create;
try
SaveToStream(St);
Bts := St.Bytes;
Result := TJSONArray.Create;
for I := Low(Bts) to High(Bts) do
Result.Add(Bts[I]);
finally
St.Free;
Finalize(Bts);
end;
end;
procedure TBitmapHelper.LoadFromJSONArray(const JSONArray: TJSONArray);
var
Ms: TBytesStream;
Bts: TArray<byte>;
I: Integer;
begin
Ms := TBytesStream.Create;
try
SetLength(Bts, JSONArray.EstimatedByteSize);
// I := JSONArray.ToBytes(Bts, 0);
for I := 0 to JSONArray.Count - 1 do
Bts[I] := JSONArray.Items[I].GetValue<byte>;
Ms.WriteData(Bts, Length(Bts));
Ms.Position := 0;
LoadFromStream(Ms);
finally
Finalize(Bts);
Ms.Free;
end;
end; |
Sous cette forme, ça fonctionne très bien.
Mais, si je dé-commente
I := JSONArray.ToBytes(Bts, 0);
et que je regarde les valeurs de Bts, ça ne va pas.
J'ai pas du tout les mêmes valeurs . A savoir que ToBytes me donne un tableau qui fait échouer le chargement du bitmap.
Comme je ne travaille que sur les octets, je ne pense pas à des histoires d'encodage.
Je garde le code qui fonctionne mais j'aimerais bien comprendre le "pourquoi du comment de la chose" ....
Une idée sur cette différence ?
Papy !
Partager