Конференция "Media" » Ошибка "JPEG error #41" [D6, WinXP]
 
  • leonidus (03.06.08 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 (03.06.08 14:39) [1]
    Ошибка, надо так:

    //переставляем их местами
    MS.Write(buffer_,Stream.Size-1000);
    MS.Write(buffer,1000);
    ms.SaveToFile('d:\1.jpg');
 
Конференция "Media" » Ошибка "JPEG error #41" [D6, WinXP]
Есть новые Нет новых   [133929   +473][b:0][p:0]