Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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; Bmp := TBitmap.Create;
try
Bmp.LoadFromFile(Arquivo);
JPeg := TJPegImage.Create; JPeg.Assign(Bmp);
JPeg.SaveToFile(ChangeFileExt(Arquivo, '.jpg')); 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');
Obrigado amigo..
Mas não pode ser em dialog. =\
Infelizmente...
Não tem um jeito mais facil de definir no codigo mesmo o diretorio?
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
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..
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]);
Agora sim..
Muito obrigado mesmo cara.
você não sabe o quanto me ajudou
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
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