Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.11;
Скачать: CL | DM;

Вниз

Нужна помощь по методам декомпрессии   Найти похожие ветки 

 
Samael6 ©   (2004-03-17 18:07) [0]

Доброго времени суток!
Господа, возникла необходимость работать с такими декомпрессорами как LZW и Flate. Но в процессе их написания возник ряд проблем, которые я не знаю как исправить.
Взял спецификацию этих методов и точно по ней написал библиотеку, то что она компрессирует, она может и разкомпрессировать, но как только подставляю соответствующую методу строку взятую из PDF-файла(именно эта информация является конечной целью), так ничего не работает, выдается ошибка и все.
Перерыл весь Инет на предмет готовых решений(в т.ч. zlib) и в них таже проблема.
Не подскажите как мне поступить? Может у кого есть работающий пример?

Заранее очень благодарен!


 
Samael6 ©   (2004-03-17 18:58) [1]

Товарищи, не кидайте душу грешную на растерзание.
Если нужно могу выложить исходники моих нароботок.


 
Mim   (2004-03-17 20:11) [2]

Например

       FIdHTTP.DoRequest(IdHTTPMethod,FRequest.URL,FRequest.SourceStream,FResponse.ResultStream);
       if FIdHTTP.Response.ContentEncoding = "deflate" then
         begin
           FResponse.ResultStream.Position := 0;
           with TDecompressionStream.Create(FResponse.ResultStream) do
           try
             Position := 0;
             s := "";
             repeat
               FillChar(buf,l,0);
               i := Read(buf,l);
               s := s + copy(buf,1,i);
             until(i <> l);
           finally
             Free;
           end;  
           FResponse.ResultStream.size := 0;
           FResponse.ResultStream.write(pointer(s)^,length(s));
         end;


 
Mim   (2004-03-17 20:11) [3]

это ZLib из delphi 7


 
Samael6 ©   (2004-03-17 20:17) [4]

А примера с файлом не приведешь, я тут запутался. Т.е. есть файл содержащий нужную инфу, нужно его раскодировать.


 
Samael6 ©   (2004-03-17 20:29) [5]

Кстати, у меня D6(см. заголовок) и объкта TDecompressionStream у меня нет. Если не трудно вышли свою библиотеку.


 
Mim   (2004-03-21 13:01) [6]

Вудзрш 6 под рукой не оказалось зато посмотрел delphi 5 cd

F:\INFO\EXTRAS\ZLIB\ZLIB.PAS                                                       DOS  Строка      115/556   Кол 1      R    32

 TDecompressionStream = class(TCustomZlibStream)

То есть обманываете сударь, есть tdecompressionstream в delphi 5 и в delphi 7 и готов поспорить на ящик пива что и в  вудзрш 6 есть.

Что касается примера с фалами - вуаля


uses classes, windows, zlib;
procedure d_(const fn1,fn2:string);
var fs1, fs2:tfilestream;
   ds: tdecompressionstream;
   buf:array [1..1024] of char;
begin
 fs1 := tfilestream.create(fn1,fmopneread);
 fs2 := tfilestream.create(fn2,fmcreate);
 try
   try
     ds := TDecompressionStream.Create(fs1);
     ds.Position := 0;
     repeat
       i := ds.Read(buf,sizeof(buf));        
       if i <> 0 then
         fs2.write(buf,i);
     until(i < sizeof(buf));
   finally
     ds.free;
   end;  
 finally
   fs1.free;
   fs2.free;
 end;
end;


Что касается первого примера то конечно твм размер буфера ныдо было взять побольше.


 
Mim   (2004-03-21 13:15) [7]

Что касается первого примера то конечно твм размер буфера ныдо было взять побольше.

Хотя нет вру
там не 1 (еденица) а l (эль ангельская L)


var
 IdHTTPMethod : TIdHTTPMethod;
 i:integer;
 s:string;
 buf:array[1..2048] of char;
const
 l = sizeof(buf);


 
Samael6 ©   (2004-03-22 14:38) [8]

Спасибо за примеры, один вопрос:

> там не 1 (еденица) а l (эль ангельская L)

А откуда она взята? В var"е ее нет...


 
Samael6 ©   (2004-03-22 14:49) [9]

Жаль, но не помогло. Уже при первом чтении выскакивает AV.


 
Samael6 ©   (2004-03-22 14:53) [10]


> > там не 1 (еденица) а l (эль ангельская L)
>
> А откуда она взята? В var"е ее нет...

А, понял - туплю. Извини.


 
Serginio666   (2004-03-22 14:55) [11]

Скачай материалы к книге Бакнелл Джулиан М

"Фундаментальные алгоритмы и структуры данных в Delphi "
http://www.diasoft.kiev.ua/cgi/webshop.cgi?config=/home/www/htdocs/diasoft/cgi/config.txt&uid=UPTiZgAA1079956398&command =link--ds_materials_set


 
Samael6 ©   (2004-03-22 15:37) [12]

Спасибо за ссылку, но там архив не находится.
А ошибка все равно не исчезла.
Может при записи в PDF-поток компрессированная строка пишется как-то по-особому и ее нужно изменять прежде чем пытаться его распаковать? Я просто копирую закодированный блок из PDF-файла в новый файл и пытаюсь его раскодировать.
Может кто скажет, что не так?


 
Samael6 ©   (2004-03-22 18:39) [13]

Так что так никто ничего и не скажет? Может кто знает стандарт потока компрессированных данных PDF"а или где почитать скажет, буду очень признателен!


 
Defunct ©   (2004-03-22 18:48) [14]

Samael6 ©   (17.03.04 18:07)  

Есть готовый компонент TCompress, знает 5 методов запаковки/распаковки LZW, LZH и еще что-то. Помоему он даже шареварный.


 
Samael6 ©   (2004-03-23 15:37) [15]

Спасибо, но основная проблема не в компрессии. Те методы, что описал Mim, вполне работоспособны. Они компрессируют и разкомпрессируют информацию такжу как и все остальные, но ни один из них не может проделать тоже самое с блоком вырезанным из PDF. Именно в этом основная проблема. Я не знаю, может в файл PDF"a пишется компрессированная инфа не чистоганом, а после какой-то обработки(криптование например)?
Если кто знает, подскажите, плиз...



Страницы: 1 вся ветка

Текущий архив: 2004.04.11;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.028 c
14-1081947771
*pavel
2004-04-14 17:02
2004.04.11
Реализация сети


14-1079332005
False_Delirium
2004-03-15 09:26
2004.04.11
Актуальная шутка.


1-1082554995
Shag
2004-04-21 17:43
2004.04.11
выделение в Excel


1-1082883969
Артем К.
2004-04-25 13:06
2004.04.11
Как вызвать диалог выбора папки?


3-1079337846
Nikolai_S
2004-03-15 11:04
2004.04.11
Как динамически добавить поля типа fkCalculated к TADOQuery?