YaaN 0 Denunciar post Postado Março 9, 2012 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
adrianno 7 Denunciar post Postado Março 9, 2012 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
YaaN 0 Denunciar post Postado Março 9, 2012 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
adrianno 7 Denunciar post Postado Março 9, 2012 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
YaaN 0 Denunciar post Postado Março 9, 2012 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
adrianno 7 Denunciar post Postado Março 10, 2012 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
YaaN 0 Denunciar post Postado Março 10, 2012 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