@Leo_Alemao6492 escreveu:
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.
Mensagens: 1
Participantes: 1