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
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
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.
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 sufixo
Iterator<ImageWriter> writers = ImageIO.getImageWritersBySuffix("jpg");
ImageWriter writer = (ImageWriter) writers.next();
// Cria um conjunto de parâmetros para configuração
ImageWriteParam param = writer.getDefaultWriteParam();
// Altera para não usar compressão automática
param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
// Muda a taxa de compressão para 100% (valor entre 0 e 1)
param.setCompressionQuality(1);
// Salva a imagem
FileImageOutputStream output = new FileImageOutputStream(toFile);
writer.setOutput(output);
writer.write(null, new IIOImage(toBufferedImage(image), null, null), param);