O arquivo gerado deveria ser identico ao original. No entanto, isso nao acontece. O tamanho do arquivo gerado difere muito do tamnho do arquivo original. alguém sabe o porquê?
Também estou com o seguinte problema: leio uma imagem do arquivo. Converto seu tipo para TYPE_INT_ARGB e mostro-a em um JLabel. Visualmente a mudança de tipo não alterou a imagem. Ela continua igualzinho a vejo no windows. No entanto com exporto ela utilizando ImageIO.write, ela fica totalmente diferente.
n, o tamanho serao diferentes pois o jpg comprime a imagem, o default de muitas ferramentas é de manter 90% da imagem e n conheço algum q mantem 100% da imagem
n vai alterar a imagem pois vc provavelmente usou jpg q n suporta ARGB, axo q soh gif e png suportam ARGB e alem disso mudar o tipo n muda em nada a imagem, caso a imagem no arquivo seja ARGB, entao quando carregado vira como ARGB, se tiver RGB vira como RGB, e se mudar o tipo e salvar, n sei qual efeito isso causaria
Amsterdam
O problema é que meu aplicativo faz tratamento de imagem utilizando uma api que trabalha com BufferedImage TYPE_INT_ARGB. Por isso leio arquivos com ImageIO.read(), transformo o tipo do objeto criado com ImageUtils.convertImageToARGB e trabalho com esse objeto. Quando quero salvar o arquivo com as alterações feitas, ele é salvo diferente do que estou vendo no JLabel.
tenta entao salvar em png ou gif, pois jpg n suporta transparencias(ARGB)
n sei se é possivel mas transforme a imagem editada(ARGB) em RGB, imprima da tela e compare com a imagem q foi salva
ou entao antes de salvar crie um bufferedimage do tipo RGB, pega o graphics e drawimage com a imagem editada, imprima na tela e verifique se ta certo e depois salve em arquivo
Amsterdam
Eu testei melhor e aqui vão os resultados. Para todas as extensões de arquivos consigo alterar brilho, contraste, rotacionar conforme o angulo desejado, converter para escala de cinza, flip vertical, horizontal e diagonal.
bmp: Nao consigo salvar o arquivo
gif: perde a animacao, se existir
jpg: adquire um tom avermelhado
png: salva perfeitamente
Como as imagens que serão tratadas pelo meu programa serão criadas por ele mesmo (imagens de ultrassons e endoscopios) vou simplesmente cria-las em formato png. Afinal tempo é dinheiro.
Valeu d+
visola
Passei por esse problema uma vez e como ChronosSage disse, é um problema de compressão. Toda vez que você lê um arquivo com ImageIO ele lê normalmente, mas quando salva, ele usa a configuração padrão de compressão que é 80% ou 90% dependendo da plataforma que você estiver.
Para evitar isso em Java, você pode usar um ImageWriter e configurá-lo para usar qualidade 100%, o que implica que a compressão não alterará a qualidade da imagem:
// Encontra o ImageWriter correto de acordo com o sufixoIterator<ImageWriter>writers=ImageIO.getImageWritersBySuffix("jpg");ImageWriterwriter=(ImageWriter)writers.next();// Cria um conjunto de parâmetros para configuraçãoImageWriteParamparam=writer.getDefaultWriteParam();// Altera para não usar compressão automáticaparam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);// Muda a taxa de compressão para 100% (valor entre 0 e 1)param.setCompressionQuality(1);// Salva a imagemFileImageOutputStreamoutput=newFileImageOutputStream(toFile);writer.setOutput(output);writer.write(null,newIIOImage(toBufferedImage(image),null,null),param);
Amsterdam
Deu certo. O problema era a taxa de compressão mesmo.
Só adicionei no final do código writer.dispose();