Текущий архив: 2011.05.22;
Скачать: CL | DM;
Вниз
Ошибка "JPEG error #41" Найти похожие ветки
← →
leonidus (2008-06-03 12:22) [0]Читаю из базы 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) [1]Ошибка, надо так:
//переставляем их местами
MS.Write(buffer_,Stream.Size-1000);
MS.Write(buffer,1000);
ms.SaveToFile("d:\1.jpg");
Страницы: 1 вся ветка
Текущий архив: 2011.05.22;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.011 c