![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ошибка "JPEG error #41" [D6, WinXP]
leonidus © (2008-06-03 12:22:00)Читаю из базы 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 я его загрузить тоже могу, откуда же тогда ошибка?
leonidus (2008-06-03 14:39:00) [1]Ошибка, надо так:
//переставляем их местами
MS.Write(buffer_,Stream.Size-1000);
MS.Write(buffer,1000);
ms.SaveToFile('d:\1.jpg');