Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

YaaN

[Resolvido] Todos os arquivos de um diretorio

Recommended Posts

Olá!

 

Eu tenho um código para converter arquivos .bmp para ,jpg..

Mas é necessario, na source " dizer " o nome exato de um arquivo e onde o mesmo se encontra..

Mas preciso que o código selecione todos os arquivos .bmp de uma pasta e execute o resto da função.

Só que não tenho a minima ideia de como fazer isso..

Fiqueis os ultimos 2 dias tentando resolver, mas sem sucesso..

 

Aqui está o código para converter

 

procedure ConverterBmpParaJPeg(Arquivo: string);
var
 Bmp: TBitmap;
 JPeg: TJPegImage;
begin
 Bmp := TBitmap.Create;
 try
Bmp.LoadFromFile(Arquivo);
JPeg := TJPegImage.Create;
try
 	JPeg.CompressionQuality := 100; { Qualidade: 100% }
 	JPeg.Assign(Bmp);
 	JPeg.SaveToFile(ChangeFileExt(Arquivo, '.jpg'));
finally
 	JPeg.Free;
end;
 finally
Bmp.Free;
 end;
end;

 

Para executar a função.. é necessario fazer assim:

 

ConverterBmpParaJPeg('C:\Arquivos\meuarquivobmp.bmp");

 

Para entender melhor..

O código deveria ficar mais ou menos assim:

 

ConverterBmpParaJPeg('C:\Arquivos');

Compartilhar este post


Link para o post
Compartilhar em outros sites

amigo, use o componente OpenPictureDialog

que abre a caixa pra você procurar o arquivo

 

ai você faz

if OpenPictureDialog.execute then
VAR IMAGEMORIGINAL: STRING;
begin
//---DIGA  ao program que , suponha  que você tenha a variavel MAGEMORIGINAL
IMAGEMORIGINAL:= OpenPictureDialog.FileName;


////e coloque  o seu codigo de converter aqui dentro

ConverterBmpParaJPeg('IMAGEMORIGINAL);

end;

 

PORQUE DA forma que você ta querendo dizer, é muito diferente, teria que indicar o nome dos arquivos 1 a 1, se quisesse fazer isso automaticamente em uma pasta toda, teria que fazer laços while, ou for, seria mais complexo que isso ai

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado amigo..

 

Mas não pode ser em dialog. =\

Infelizmente...

 

Não tem um jeito mais facil de definir no codigo mesmo o diretorio?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, a solução seria assim pra você pegar os arquivos da pasta olha

 

coloque no seu forme estes elementos

 

eu coloquei os nomes neles ao meu gosto, lembre-se de alterar corretamente se quiser

TFileListBox ( chamei de pega_file) ;

TDriveComboBox ( chamei de pega_drive)

TDirectoryListBox ( chamei de pega_pasta)

TSpeedButton; ( chamei de btn_processar)

 

OK, o pega_drive > pega_pasta >pega_file ///sendo assim você vai poder selecionar a UNIDADE, diretorio e automaticamente vai mostrar todos os arquivos dela

 

agora a magica

 

ao executar o btn_processar o comando é assim

 

 


procedure TForm1.btn_processarClick(Sender: TObject);

VAR QTD_ARQUIVOS :Integer;///defini  uma variavel pra ajudar a contagem
begin
QTD_ARQUIVOS:=  pega_file.items.count; // defini  que a variavel QTD_ARQUIVOS vai pegar o valor  do total de arquivos da pasta  que você selecionou

///aqui  eu dou  um for regredindo do total de arquivos até acabar
//EXE se tiver  10 arquivos, ele vai regredir 10,9,8,7 até acabar
for QTD_ARQUIVOS:=  pega_file.items.count downto 1 do 
begin

 //aqui dentro  eu obtenho o nome  do arquivo que  o loop passou no momento
 //é a informação que você precisa  para  pegar  os arquivos automaticamente
 // jogando seu processamento da imagem aqui 
 //sendo  assim ó ConverterBmpParaJPeg(pega_file.Items.strings[QTD_ARQUIVOS-1]);

SHOWMESSAGE(pega_file.Items.strings[QTD_ARQUIVOS-1]); //dei um showmessage  pra testar  os nomes
ConverterBmpParaJPeg(pega_file.Items.strings[QTD_ARQUIVOS-1]);
//-------
end;
end;


 

é a forma unica que encontrei pra isso no momento amigo

e aqui funcionou numa boa

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo..

 

Testei o código .. compilou normalmente.

Mas na hora de converter ele da um erro. " Bitmap is not valid "

O showmessage aparece antes disso.. mas logo da o erro e nenhuma image é convertida..

 

Bom. pelo menos é um inicio..

 

Vou dar uma " fuçada " no código para ver se consigo descobrir oque eu fiz de errado..

Mas se você tiver como me ajudar novamente, fico muito muito grato mesmo..

 

Só lembrando que estou usando a versão 7 do Delphi..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom amigo, este é o metodo perfeito pra fazer isso ae, so precisa de tratamentos.

o codigo ai que te passei, consegue perfeitamente capturar o arquivo, todos automaticamente da pasta que voce pode selecionar no diretorio list box, porem, você tem que fazer um tratamento,

 

aqui ó = ConverterBmpParaJPeg(pega_file.Items.strings[QTD_ARQUIVOS-1]); você precisa ainda indicar o diretorio

onde esta a imagem , porque até neste momento a unica coisa que você recebe é o nome do arquivo

precisa indicar a sua função de converter, todo o caminho ou seja, fora o "pega_file.Items.strings[QTD_ARQUIVOS-1]); que retorna somente o nome da imagem, você ainda tem que por o caminho ou seja, pega do componente TDirectoryListBox pasta, assim você junta com o nome do arquivo,

 

AQUI Ó

 

ASSIM DESTA FORMA

ConverterBmpParaJPeg(pega_pasta.Directory +'\'+ pega_file.Items.strings[QTD_ARQUIVOS-1]);

//SE você DER  O SHOWMESSAGE VAI VER  QUE AGORA MOSTRA  O CAMINHO COMPLETO, impossivel nao dar certo

SHOWMESSAGE(pega_pasta.Directory +'\'+ pega_file.Items.strings[QTD_ARQUIVOS-1]);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora sim..

 

Muito obrigado mesmo cara.

você não sabe o quanto me ajudou

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.