Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Witam.
Stworzyłem sobie program do prostych operacji na plikach graficznych. Mam jednak problem, poniewaz nie moge uruchomic drukowania, sypie bledami.
Moge liczyc na pomoc bardziej doswiadczinych w programowaniu?
Dzieki za wszelką pomoc debianowcy.
klasa main:
/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package javaapplication6; import javax.swing.JFrame; /** * * @author E5500 */ public class Main { /** * @param args the command line arguments */ public static void main(String[] args) { JFrame frame=new Ramka(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); // TODO code application logic here } }
Klasa Ramka:
/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package javaapplication6; import java.awt.BorderLayout; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.geom.AffineTransform; import java.awt.image.AffineTransformOp; import java.awt.image.BufferedImage; import java.awt.image.BufferedImageOp; import java.awt.image.ByteLookupTable; import java.awt.image.ConvolveOp; import java.awt.image.Kernel; import java.awt.image.LookupOp; import java.awt.image.RescaleOp; import java.io.File; /*import java.io.IOException; import java.util.Arrays; import java.util.Iterator; import java.util.List; import java.util.Set; import java.util.TreeSet; import javax.imageio.IIOImage; import javax.imageio.ImageIO; import javax.imageio.ImageReader; import javax.imageio.ImageWriter; import javax.imageio.stream.ImageOutputStream;*/ import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import javax.imageio.ImageIO; //import javax.swing.ImageIcon; import javax.print.Doc; import javax.print.DocFlavor; import javax.print.DocPrintJob; import javax.print.PrintException; import javax.print.PrintService; import javax.print.PrintServiceLookup; import javax.print.SimpleDoc; import javax.swing.ButtonGroup; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JRadioButton; import javax.swing.JRadioButtonMenuItem; import sun.java2d.pipe.SpanShapeRenderer.Simple; /* * To change this template, choose Tools | Templates * and open the template in the editor. */ /** * * @author E5500 */ class Ramka extends JFrame{ public Ramka() { setTitle("Program graficzny"); setSize(1024,786); //panel-transformacje obrazu JPanel panel=new JPanel() { @Override public void paintComponent(Graphics g) { super.paintComponents(g); if (image!=null)g.drawImage(image, 0, 0, null);} }; add(panel, BorderLayout.CENTER); //menu programu JMenuBar menuBar=new JMenuBar(); setJMenuBar(menuBar); JMenu menu=new JMenu("Plik"); JMenu processingimage=new JMenu("Transformacje obrazu"); JMenu about=new JMenu("O programie"); menuBar.add(menu); menuBar.add(processingimage); menuBar.add(about); JMenuItem openitem=new JMenuItem("Otworz Plik"); JMenuItem exititem=new JMenuItem("Wyjscie"); JMenuItem saveitem=new JMenuItem("Zapisz"); JMenuItem printitem=new JMenuItem("Drukuj"); JMenuItem bluritem=new JMenuItem("Blur"); JMenuItem sharpenitem=new JMenuItem("Sharpen"); JMenuItem brightenitem=new JMenuItem("Bright"); JMenuItem edgeitem=new JMenuItem("Edge"); JMenuItem negativeitem=new JMenuItem("Negative"); JMenuItem rotateitem=new JMenuItem("Rotate"); JMenuItem aboutitem=new JMenuItem("O programie"); JMenuItem drukujitem=new JMenuItem("Drukowanie"); menu.add(openitem); menu.add(saveitem); menu.add(printitem); menu.add(exititem); processingimage.add(bluritem); processingimage.add(sharpenitem); processingimage.add(brightenitem); processingimage.add(edgeitem); processingimage.add(negativeitem); processingimage.add(rotateitem); about.add(aboutitem); DocFlavor flavor=DocFlavor.INPUT_STREAM.GIF; addPrintServices(menu, flavor); /*ramka do wyswietlania pogldadu zdjec label=new JLabel(); add(label);*/ openitem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { openFile(); } }); printitem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { printFile(); } }); exititem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { System.exit(0); } }); bluritem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { float weight=1.0f/9.0f; float[] elements=new float[9]; for(int i=0;i<9;i++)elements[i]=weight; convolve(elements); } }); brightenitem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { float a=1.1f; float b= -20.0f; RescaleOp op=new RescaleOp(a, b, null); filter(op); } }); edgeitem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { float[] elements= {0.0f, -1,0f, 0.0f, -1.0f, 4.f, -1,0f, 0.0f, -1.0f, 0.0f }; convolve (elements);} }); sharpenitem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { float[] elements= { 0.0f, -1.0f, 0.0f, -1.0f, 5.f, -1.0f, 0.0f, -1.0f, 0.0f, }; convolve(elements); } }); negativeitem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { byte negative[]=new byte[256]; for(int i=0;i<256;i++)negative[i]=(byte)(255-i); ByteLookupTable table=new ByteLookupTable(0, negative); LookupOp op=new LookupOp(table, null); filter(op); } }); rotateitem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { if(image==null)return; AffineTransform transform=new AffineTransform().getRotateInstance(Math.toRadians(90), image.getWidth()/4, image.getHeight()/4); AffineTransformOp op=new AffineTransformOp(transform, AffineTransformOp.TYPE_BILINEAR); filter(op); } }); aboutitem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { JOptionPane.showMessageDialog(null, "Program stworzony na przedmiot " + "Warsztaty Programistyczne."); } }); } //drukowanie public void addPrintServices(JMenu menu, DocFlavor flavor) { PrintService[] services=PrintServiceLookup.lookupPrintServices(flavor, null); ButtonGroup group=new ButtonGroup(); for(int i=0;i<services.length;i++) { final PrintService service=services[i]; JRadioButtonMenuItem item= new JRadioButtonMenuItem(service.getName()); menu.add(item); if(i==0) { item.setSelected(true);//currentService!!! currentService=service; } group.add(item); item.addActionListener(new ActionListener() { public void ActionPerformed(ActionEvent event) { currentService=service; } } ); } } //metoda otwierajaca pliki graficzne public void openFile() { JFileChooser chooser=new JFileChooser(); chooser.setCurrentDirectory(new File(".")); chooser.setFileFilter(new javax.swing.filechooser.FileFilter() { public boolean accept(File f) { String name= f.getName().toLowerCase(); return name.endsWith(".gif")||name.endsWith(".jpg")||name.endsWith(".jpeg") || f.isDirectory(); } public String getDescription(){ return "Pliki graficzne"; } } ); int r=chooser.showOpenDialog(Ramka.this); if(r!=JFileChooser.APPROVE_OPTION)return; try { image=ImageIO.read(chooser.getSelectedFile()); } catch (IOException e){ JOptionPane.showMessageDialog(this, e); } repaint(); //fileName=chooser.getSelectedFile().getPath(); //label.setIcon(new ImageIcon(fileName)); } //koniec printService //teraz metoda printfile public void printFile() { try { if(fileName==null)return; if(currentService==null)return; FileInputStream in=new FileInputStream(fileName); DocFlavor flavor=DocFlavor.INPUT_STREAM.GIF; Doc doc=new SimpleDoc(in, flavor,null); DocPrintJob job=currentService.createPrintJob(); job.print(doc, null); } catch (FileNotFoundException e) { JOptionPane.showMessageDialog(this, e); } catch (PrintException e) { JOptionPane.showMessageDialog(this, e); } } private void filter(BufferedImageOp op) { if(image==null)return; BufferedImage filteredImage=new BufferedImage(image.getWidth(), image.getHeight(), image.getType()); op.filter(image, filteredImage); image=filteredImage; repaint(); } //odrysowanie ponowne panela private void convolve(float[] elements) { Kernel kernel=new Kernel(3, 3, elements); ConvolveOp op=new ConvolveOp(kernel); filter(op); } private JLabel label; private String fileName; private BufferedImage image; private PrintService currentService; }
Offline
Klasa Ramka sie nie kompiluje bo:
- brakuje zmiennych image, currentService, fileName
- brakuje metod: convolve, filter
Offline
0dd napisał(-a):
Klasa Ramka sie nie kompiluje bo:
- brakuje zmiennych image, currentService, fileName
- brakuje metod: convolve, filter
Dzieki za odzew.
Metody filter i convolve są w kodzie tak samo jak zmienne-spójrz na koniec klasy Ramka :)
Problem jest jeden-wystarczy zahaszować
addPrintServices(menu, flavor);
i kompiluje się bez błedów i działa. Problem jest z drukowaniem, nie wiem jak je uruchomić, aby działało poprawnie.
Pozdrawiam.
Offline
w metodzie printFile() masz:
if(fileName==null)return;
Wydaje mi sie ze fileName zawsze jest null.
Offline
0dd napisał(-a):
w metodzie printFile() masz:
Kod:
if(fileName==null)return;Wydaje mi sie ze fileName zawsze jest null.
To nie to, problem z addPrintServices(menu, flavor) zniknął, button się pojawił w menu, ale po kliknięciu dalej nie odpala wydruku. Ma ktoś jeszcze jakiś pomysł?
Offline
sonic81 napisał(-a):
Witam.
Stworzyłem sobie program do prostych operacji na plikach graficznych. Mam jednak problem, poniewaz nie moge uruchomic drukowania, sypie bledami.
Moge liczyc na pomoc bardziej doswiadczinych w programowaniu?
A można liczyć na wklejenie tych błędów?
Offline
Nieaktualne już ale dzięki za pomoc.
Pozdro
Offline