Обработка сжатия данных Delphi(2)
Буфер: PChar;
Счет: целое число;
Начинать
file://Прочитать исходный размер изображения из потока сжатых изображений
ComPRessedStream.ReadBuffer(Count, SizeOf(Count));
file://Выделить блоки памяти для чтения исходного потока изображений в зависимости от размера изображения
GetMem(Буфер, Количество);
DestStream := TMemoryStream.Create;
SourceStream:= TDecompressionStream.Create(CompressedStream);
Пытаться
file://распаковывает сжатый поток изображений и сохраняет его в блоке буферной памяти.
SourceStream.ReadBuffer(Буфер^, Количество);
file://сохраните исходный поток изображений в поток DestStream
DestStream.WriteBuffer(Буфер^, Количество);
DestStream.Position := 0;//Сбросить указатель потока
//Загружаем исходный поток изображений из потока DestStream
Bmp.LoadFromStream(DestStream);
окончательно
FreeMem(Буфер);
ДестСтрим.Бесплатно;
конец;
конец;
4. Событие OnClick кнопки сжатия
процедура TForm1.Button1Click(Отправитель: TObject);
вар
BMP: TBitmap;
Сжатый поток: TMemoryStream;
начинать
Bmp := TBitmap.Create;
CompressedStream := TMemoryStream.Create;
Пытаться
file://Захват всего текущего экрана и сохранение изображения в объект Bmp GetScreen(Bmp);
file:// сохраняет изображение в объекте Bmp в поток памяти.
Bmp.SaveToStream(СжатыйПоток);
file://Сжимает исходный поток изображений в соответствии со степенью сжатия по умолчанию.
CompressBitmap(CompressedStream, clDefault);
file://Сохранить сжатый поток изображений в виде файла в пользовательском формате
CompressedStream.SaveToFile(' C:cj.dat');
окончательно
БМП.Бесплатно;
СжатыйПоток.Бесплатно;
конец;
конец;
5. Событие OnClick кнопки "Разархивировать"
процедура TForm1.Button2Click(Отправитель: TObject);
вар
СжатыйПоток: TFileStream;
BMP: TBitmap;
начинать
Bmp := TBitmap.Create;
file://Открыть файл пользовательского сжатого формата в режиме только для чтения файлового потока
CompressedStream:= TFileStream.Create(' C:cj.dat', fmOpenRead);
Пытаться
file://распаковывает сжатый поток изображений
UnCompressBitmap (CompressedStream, Bmp);
file://Восстановить исходный поток изображений в указанный файл BMP
Bmp.SaveToFile(' C:cj.bmp');
окончательно
БМП.Бесплатно;
СжатыйПоток.Бесплатно;
конец;
конец;
Кроме того, объект TCompressionStream также предоставляет свойство CompressionRate, которое используется для описания степени сжатия после сжатия исходных данных. Событие OnProgress запускается во время процессов сжатия и распаковки. Разработчики могут записать это событие для отображения кода выполнения. .
Приведенный выше код проходит отладку и выполняется в Delphi 5.0.