Processamento de compactação de dados Delphi(2)
Tampão: PChar;
Contagem: Inteiro;
Começar
file://Lê o tamanho da imagem original do fluxo de imagens compactadas
ComPRessedStream.ReadBuffer(Contagem, SizeOf(Contagem));
file://Aloque blocos de memória para o fluxo de imagem original a ser lido com base no tamanho da imagem
GetMem(Buffer, Contagem);
DestStream := TMemoryStream.Create;
SourceStream := TDecompressionStream.Create(CompressedStream);
Tentar
file://descompacta o fluxo de imagem compactado e o armazena no bloco de memória Buffer
SourceStream.ReadBuffer(Buffer^, Contagem);
file://salve o fluxo de imagem original no fluxo DestStream
DestStream.WriteBuffer(Buffer^, Contagem);
DestStream.Position := 0;//Redefinir ponteiro de fluxo
//Carrega o stream de imagem original do stream DestStream
Bmp.LoadFromStream(DestStream);
finalmente
FreeMem(Buffer);
DestStream.Free;
fim;
fim;
4. Evento OnClick do botão de compactação
procedimento TForm1.Button1Click(Remetente: TObject);
var
Bmp: TBitmap;
ComprimidoStream: TMemoryStream;
começar
Bmp := TBitmap.Create;
ComprimidoStream := TMemoryStream.Create;
Tentar
file://Capture toda a tela atual e salve a imagem no objeto Bmp GetScreen(Bmp);
file:// salva a imagem no objeto Bmp no fluxo de memória
Bmp.SaveToStream(ComprimidoStream);
file://Compacta o fluxo de imagem original de acordo com a taxa de compactação padrão
CompressBitmap(CompressedStream, clDefault);
file://Salve o fluxo de imagem compactado como um arquivo em um formato personalizado
CompressedStream.SaveToFile('C:cj.dat' );
finalmente
Bmp.Livre;
ComprimidoStream.Free;
fim;
fim;
5. Evento OnClick do botão Descompactar
procedimento TForm1.Button2Click(Remetente: TObject);
var
ComprimidoStream: TFileStream;
Bmp: TBitmap;
começar
Bmp := TBitmap.Create;
file://Abre um arquivo de formato compactado personalizado no modo somente leitura do fluxo de arquivos
CompressedStream := TFileStream.Create(' C:cj.dat' , fmOpenRead);
Tentar
file://descompacta o fluxo de imagem compactado
UnCompressBitmap(ComprimidoStream, Bmp);
file://Restaura o fluxo de imagem original para o arquivo BMP especificado
Bmp.SaveToFile('C:cj.bmp' );
finalmente
Bmp.Livre;
ComprimidoStream.Free;
fim;
fim;
Além disso, o objeto TCompressionStream também fornece a propriedade CompressionRate, que é usada para descrever a taxa de compactação após a compactação dos dados originais. O evento OnProgress é acionado durante os processos de compactação e descompactação. .
O código acima passa na depuração e execução no Delphi 5.0.