Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) espaço insuficiente + foto


vitorslp

Pergunta

Olá, estou com um pequeno problema, espero que possam me ajudar Smile

Tenho um sistema de confecção de carteiras, onde a foto e obtida por uma webcam, uso o DSPack para isso.

Peguei um modelo pronto que vem com o DSPack(tá aí meu 1° erro) e contrui o formulário e botões em cima do modelo pronto.

E fiz o sistema, está funcionando perfeitamente... Mas

Eu estava fazendo testes gravando vários registros com foto e tal, a foto é salva no hd e no BD os dados do formulário e o caminho da foto. Quando eu havia gravado mais ou menos 40 cadastros(cada cadastro vai uma foto) deu o seguinte erro: "espaço insuficiente de armazenamento para processar este comando"

Creio eu que seja porque no botão FOTOGRAFAR cada clique que eu dou a função é chamada, então eu chamei a mesma função 40 vezes :S

Pesquisei na internet e achei esse tópico que é exatamente o meu problema:

http://www.tiforum.com.br/viewtopic.php?f=3&t=6468

Preciso muito solucionar isso, obrigado a todos!

Os códigos:

botão fotografar:

Código:

SampleGrabber.GetBitmap(Image.Picture.Bitmap);

Image.Picture.Bitmap := CortarImagem(Image.Picture.Graphic, Bounds(280, 0, Image.Picture.Width, Image.Picture.Height - 0));
Função: Código:
Function CortarImagem(Imagem: TGraphic; Valores: TRect): TBitmap;
var
bmp, tbmp: TBitmap;
drect: TRect;
begin
bmp := TBitmap.Create;
bmp.Height := Valores.Bottom - Valores.Top;
bmp.Width := Valores.Right - Valores.Left;
drect := Bounds(0, 0, bmp.Width, bmp.Height);
try
tbmp := TBitmap.Create;
tbmp.Height := Imagem.Height;
tbmp.Width := Imagem.Width;
//tbmp.Canvas.Draw(500,0,Imagem);
tbmp.Canvas.Draw(140,0,Imagem);

bmp.Canvas.CopyRect(drect, tbmp.Canvas, Valores);
Result := bmp;
finally
tbmp.Free;
end;
end;

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0
Tenho um sistema de confecção de carteiras, onde a foto e obtida por uma webcam, uso o DSPack para isso.

Peguei um modelo pronto que vem com o DSPack(tá aí meu 1° erro) e contrui o formulário e botões em cima do modelo pronto.

E fiz o sistema, está funcionando perfeitamente... Mas

Eu estava fazendo testes gravando vários registros com foto e tal, a foto é salva no hd e no BD os dados do formulário e o caminho da foto. Quando eu havia gravado mais ou menos 40 cadastros(cada cadastro vai uma foto) deu o seguinte erro: "espaço insuficiente de armazenamento para processar este comando"

Creio eu que seja porque no botão FOTOGRAFAR cada clique que eu dou a função é chamada, então eu chamei a mesma função 40 vezes :S

erro: "espaço insuficiente de armazenamento para processar este comando"

O correto não é cortar uma imagem BMP uma vez que o tamanho de cada foto está em torno de 1.5 Mb

uma solução não muito simples seria:

1 - salvar a foto bmp no drive ex: C:\Foto.bmp

2 - transformar a Foto.bmp para Foto.jpg

3 - jogar a Foto.jpg para o clipboard

4 - aplicar a Foto.jpg compressão com qualidade de 40 %

5 - salvar novamente a Foto.jpg no drive ex: C:\Foto.jpg

6 - redefinir a escala da foto para um tamanho menor ( ex: 4 Kb )

7 - salvar no banco de dados

dessa maneira não haverá problemas de espaço insuficiente de armazenamento

Procure fazer uma pesquisa no forum pela palavra chave JPG

http://scriptbrasil.com.br/forum/index.php...1472&hl=jpg

http://scriptbrasil.com.br/forum/index.php...6649&hl=jpg

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

opa, muito obrigado pela resposta!

eu andei pesquisando mais e descobri que o erro não é questão de espaço no HD e sim uma função que eu chamo várias vezes e não libero ela.

Cada vez que eu clico no meu botão fotografar a função é chamada e o "bmp" é sempre criado, nunca destuido.

Aqui: bmp := TBitmap.Create;

que eu crio na função.

Eu tentei colocar bmp.Free no código da "function" acima mas deu erro :/

E HD não é problema xD tenho 2 HD's de 500GB cada.

Link para o comentário
Compartilhar em outros sites

  • 0

ah sim, obrigado novamente.

Então o problema não é com a chamada constante da função?

Porque eu tava testando aqui novamente, e começei a somente clicar no botão fotografar, sem salvar nem nada, só jogar a imagem da webcam pro TImage.

E quando eu cheguei a uns 40 cliques um após o outro deu esse erro: "espaço insuficiente de armazenamento para processar este comando"

Link para o comentário
Compartilhar em outros sites

  • 0
Então o problema não é com a chamada constante da função?

o problema é com a chamada constante da função, mas voce não reparou no codigo todo

SampleGrabber.GetBitmap(Image.Picture.Bitmap);  // Chamada da função

Image.Picture.Bitmap := CortarImagem(Image.Picture.Graphic, Bounds(280, 0, Image.Picture.Width, Image.Picture.Height - 0));

Experimente assim

SampleGrabber.GetBitmap(Image.Picture.Bitmap, Buffer);

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

opa, muito obrigado pela força Jhonas, mas achei uma solução melhor...

Adeus função! eAUaHUEhuaE

O Glauber/prodigy do delphix escreveu esse código pra mim:

var
  Corta: Integer;
begin
  SampleGrabber.GetBitmap(Image.Picture.Bitmap);
  Corta := 140;
  Image.Picture.Bitmap.Canvas.CopyRect(Bounds(0, 0, Image.Picture.Width-(Corta*2), Image.Picture.Height),
                        Image.Picture.Bitmap.Canvas,
                        Bounds(Corta, 0, Image.Picture.Width-(Corta*2), Image.Picture.Height));
  Image.Picture.Bitmap.Width := Image.Picture.Bitmap.Width - (Corta*2);

Então que estiver com o mesmo problema com o DSPack, simplismente apague a função e use o código acima no seu botão.

Obrigado a todos!

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...