Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.04 c
1-1082661442
Yegorchic
2004-04-22 23:17
2004.04.11
TImage.Picture.Loadfromfile


1-1080094311
npr2
2004-03-24 05:11
2004.04.11
caption окна


3-1078997841
RavenD
2004-03-11 12:37
2004.04.11
почему теряются данные при запросе?


1-1082444567
Сережа550
2004-04-20 11:02
2004.04.11
GUI-Консоль


1-1079711664
alex732
2004-03-19 18:54
2004.04.11
ListView1.Canvas





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский