-
Читаю из базы BLOB-поле содержащее JPEG, но он там зашифрован немного, точнее куски файла переставлены местами. Процедура выглядит так:
var Stream,Stream_:tStream; JPG:TJPEGImage;
buffer:array[1..1000] of char; buffer_:array[1..500000] of char; MS:TMemoryStream; begin
Stream:=ADODataSet1.CreateBlobStream(ADODataSet1.FieldByName('picture'), bmRead);
MS:=TMemoryStream.Create;
if Stream.Size>0 then begin JPG:=TJPEGImage.Create;
//получаем два куска, на 1000 байт и остальную часть Stream.Seek(0,soFromBeginning); Stream.ReadBuffer(buffer,1000); Stream.Seek(1000,soFromBeginning); Stream.ReadBuffer(buffer_,Stream.Size-1000);
//переставляем их местами MS.Write(buffer_,Stream.Size-1000); MS.Write(buffer,1000);
try JPG.LoadFromStream(MS); ms.Free; Image1.Picture.Assign(JPG); finally JPG.Free; Stream.Free; end; end;
после выполнения этого кода, на строчке Image1.Picture.Assign(JPG); получаю ошибку JPEG error #41. Я бы все понял возможно ошибка в расшифровке, но если написать:
//переставляем их местами MS.Write(buffer_,Stream.Size-3000); MS.Write(buffer,3000); ms.SaveToFile('d:\1.jpg');
то полученный файл d:\1.jpg отлично открывается через ACDSee, да и принудительно в TImage я его загрузить тоже могу, откуда же тогда ошибка?
-
Ошибка, надо так:
//переставляем их местами MS.Write(buffer_,Stream.Size-1000); MS.Write(buffer,1000); ms.SaveToFile('d:\1.jpg');
|