Redimensionando BufferedImages e armazenando-os para o arquivo resulta em fundo preto para imagens JPG

Eu tenho o seguinte código:

import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;


public class JavaApplication
{
    public static void main(String[] args) throws Exception
    {
        File orig = new File ("/home/xxx/Pictures/xxx.jpg");
        BufferedImage bm1 = ImageIO.read(orig);

        Image scaled = bm1.getScaledInstance(100, 200, BufferedImage.SCALE_SMOOTH);
        BufferedImage bm2 = toBufferedImage(scaled);

        File resized = new File ("/home/xxx/Pictures/resized.jpg");
        ImageIO.write(bm2, "jpg", resized);
    }

    public static BufferedImage toBufferedImage(Image img)
    {
        if (img instanceof BufferedImage)
        {
            return (BufferedImage) img;
        }

        BufferedImage bimage = new BufferedImage(img.getWidth(null),       img.getHeight(null), BufferedImage.TYPE_INT_ARGB);

        bimage.getGraphics().drawImage(img, 0, 0 , null);
        return bimage;
      }
}

Se eu usar esse código em um arquivo .png, ele funciona bem e redimensiona o arquivo conforme o esperado. No entanto, em arquivos jpg, isso resulta em um fundo preto.

Se eu remover ogetScaledInstance() código e simplesmente tentar reescrever o originalbm1 para o disco usandoImageIO.write(bm1, "jpg", resized)Isso funciona bem. Somente ao redimensionar usandogetScaledInstance() e, em seguida, tentando converter o resultanteImage de volta aBufferedImage, obtenho um arquivo de plano de fundo completamente preto.

Alguma idéia de como consertar isso ou o que estou fazendo de errado?

questionAnswers(1)

yourAnswerToTheQuestion