Postagens

Mostrando postagens de setembro, 2012

TMemoryStream: Resolva o problema para imagens grandes

Essa dica vai ajudar muita gente! Já aconteceu com você de precisar transferir uma imagem (principalmente JPEG) ou qualquer outro Stream (seja via datasnap ou qualquer outro meio) e se deparar com vários erros gerados pelo Delphi? Um deles é o "Out of memory while expanding..." Acontece que o TMemoryStream só aceita até 40kb, segundo o docwiki da embarcadero e isso é um problema sério pra nós programadores. Mas vamos lá, sem mais, declare a função abaixo no seu código e quando for salvar ou carregar seu Stream, use-a. Vou dar exemplos abaixo. function CopyStream( const source: TStream ): TStream; //resolve o problema de memory stream com mais de 40kb var BytesRead: Integer; Buffer: PByte; const MaxBufSize = $F000; begin { ** Criando a instância do objeto TMemoryStream para retorno do método ** } result := TMemoryStream.Create; { ** Reposicionando o stream para o seu início ** } source.Seek( 0, TSeekOrigin.soBeginning ); sou