Como faço para substituir Graphics2D para java 2d?

Tenho um codigo que faz o seguinte, ele pega a imagem da webcam e coloca em um JLabel, e após isso ele manda para outro jPanel em outro Jlabel que salva como imagem, ao salvar ele reduz consideravelmente a qualidade da imagem que foi capturada. gostaria de saber como é possível melhorar isso. segue código:

Este é o comando para pegar a imagem da camera e colocar no jlabel:

    FrameGrabbingControl fgc = (FrameGrabbingControl) player.getControl("javax.media.control.FrameGrabbingControl");
    Buffer buffer = fgc.grabFrame();

    BufferToImage bti = new BufferToImage((VideoFormat) buffer.getFormat());
    Image image = bti.createImage(buffer);

    BufferedImage imageresize = new BufferedImage(330, 280, BufferedImage.TYPE_INT_RGB);
    Graphics2D g2d = imageresize.createGraphics();
    g2d.setComposite(AlphaComposite.Src);
    g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
    g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
    g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    g2d.drawImage(image, 0, 0, 330, 280, null);
    g2d.dispose();

    this.setImageButton(this.lbfoto1, imageresize);

Este comando é para mandar a foto que esta no jlabel para outro jpanel onde vai para um jlabel:

foo.getLbfotoo1().setIcon(lbfoto1.getIcon());

esse comando é o que salva a o jframe como uma imagem para após imprimir:

public static BufferedImage getScreenShot(Component componente) {
    BufferedImage image = new BufferedImage(componente.getWidth(), componente.getHeight(), BufferedImage.TYPE_INT_RGB);
    componente.paint(image.getGraphics());
    Graphics graphics = image.getGraphics();
    componente.printAll(graphics);
    graphics.dispose();
    return image;
}

////////////////////////////////////////////////////////////////////////////////////////////////////
//pega a imagem de buffer e salva no caminho especifico
public static void SaveScreenShot(Component componente, String filename) throws Exception {
    int cont = 1;
    BufferedImage img = getScreenShot(componente);
    //verifica se tem imagem no caminho abaixo
    File file = new File("C:\\imagens\\Fotos\\" + filename + cont + ".png");
    // se existe, soma mais um e salva uma nova imagem
    while (file.exists()) {
        cont++;
        file = new File("C:\\imagens\\Fotos\\" + filename + cont + ".png");
    }
    //se nao existir
    if (!file.exists()) {
        //JOptionPane.showMessageDialog(componente, "foto nao existe,copiando");
        ImageIO.write(img, "png", file);
    }

}

Este comando é o que imprime a imagem ja salva:

public PrintImage() {

    ////busca no diretório abaixo a foto;
    String diretorio = "C:\\imagens\\Fotos\\";
    File file = new File(diretorio);
    File afile[] = file.listFiles();
    File rootDirectory = new File(diretorio);
    Integer totalFiles = rootDirectory.listFiles().length;
    File lastFile = new File("Fotografia modelo 1 - " + totalFiles + ".png");
    System.out.println(lastFile.getName());

    //////////////////////////////////////////////////////////////////////////////  
    PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();

    pras.add(MediaSizeName.JAPANESE_POSTCARD);
   // pras.add(OrientationRequested.PORTRAIT); 
    pras.add(new Copies(1));

    PrintService pss[] = PrintServiceLookup.lookupPrintServices(DocFlavor.INPUT_STREAM.PNG, pras);
    if (pss.length == 0) {
        JOptionPane pane_foto = new JOptionPane("Erro Ao Imprimir, Verifique Impressora");
        final JDialog dialog_foto = pane_foto.createDialog(null, "Cabine Fotográfica");

        Timer timer_foto = new Timer(2000,
                new ActionListener() {
                    public void actionPerformed(ActionEvent evt) {
                        dialog_foto.dispose();
                    }
                });
        timer_foto.setRepeats(false);

        timer_foto.start();
        dialog_foto.show();
        dialog_foto.setUndecorated(false);
        timer_foto.stop();
        System.exit(0);

    }
    if (pss.length != 0) {
        PrintService ps = pss[0];
        System.out.print("Imprimindo na impressora: \n" + ps);
        DocPrintJob job = ps.createPrintJob();
        FileInputStream fin = null;
        try {
            fin = new FileInputStream(diretorio + lastFile.getName());
        } catch (FileNotFoundException ex) {
            new arquivoLog("Erro FileNotFoundException: " + ex +" Arquivo não encontrado");

            JOptionPane pane_foto = new JOptionPane("O sistema não pode encontrar o arquivo especificado, Verifique!");
            final JDialog dialog_foto = pane_foto.createDialog(null, "Cabine Fotográfica");

            Timer timer_foto = new Timer(2000,
                    new ActionListener() {
                        public void actionPerformed(ActionEvent evt) {
                            dialog_foto.dispose();
                        }
                    });
            timer_foto.setRepeats(false);

            timer_foto.start();
            dialog_foto.show();
            dialog_foto.setUndecorated(false);
            timer_foto.stop();
        }
        Doc doc = new SimpleDoc(fin, DocFlavor.INPUT_STREAM.PNG, null);

        try {
            job.print(doc, pras);
        } catch (PrintException ex) {
            new arquivoLog("Erro PrintException: " + ex+ " Impressora não encontrada!");
            JOptionPane.showMessageDialog(null, "Impressora não encontrada!");
        }
        try {
            //Thread.sleep(1000);
            fin.close();
        } catch (IOException ex) {
            new arquivoLog("Erro IOException: " + ex);
            JOptionPane.showMessageDialog(null, "Ocorreu um Erro, entre em contato com o suporte!");
        }

    }

}

Porém ao renderizar a imagem ela perde qualidade e tamanho em mb, como posso fazer a substituição da biblioteca?

eu transfiro de um frame para outro pois ele faz mais de uma captura da webcam, ai ele salva em um outro jframe, que terá um fundo e na frente as imagens capturadas da webcam, e dps de elas estarem capturadas ele salva como imagem e manda imprimir.

o problema esta na hora que eu transfiro para outro jframe eu acho, pois ali que esta o buffer, mas não sei como resolver.

este sistema uso para cabine de fotos. mas preciso melhorar a foto que é salva pois na impressão é notavel a diferença.