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!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2009-09-01 11:25:07

  sonic81 - Użytkownik

sonic81
Użytkownik
Zarejestrowany: 2006-11-03

Java-problem z drukowaniem.

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:

Kod:

/*
 * 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:

Kod:

/*
 * 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

 

#2  2009-09-01 12:21:06

  0dd - Członek DUG

0dd
Członek DUG
Skąd: Kraków
Zarejestrowany: 2006-03-25

Re: Java-problem z drukowaniem.

Klasa Ramka sie nie kompiluje bo:
- brakuje zmiennych image, currentService, fileName
- brakuje metod: convolve, filter


apt-get install anarchism

Offline

 

#3  2009-09-01 12:30:22

  sonic81 - Użytkownik

sonic81
Użytkownik
Zarejestrowany: 2006-11-03

Re: Java-problem z drukowaniem.

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ć

Kod:

 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

 

#4  2009-09-01 12:58:19

  0dd - Członek DUG

0dd
Członek DUG
Skąd: Kraków
Zarejestrowany: 2006-03-25

Re: Java-problem z drukowaniem.

w metodzie printFile() masz:

Kod:

if(fileName==null)return;

Wydaje mi sie ze fileName zawsze jest null.


apt-get install anarchism

Offline

 

#5  2009-09-02 10:22:54

  sonic81 - Użytkownik

sonic81
Użytkownik
Zarejestrowany: 2006-11-03

Re: Java-problem z drukowaniem.

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

 

#6  2009-09-02 13:50:55

  kamikaze - Administrator

kamikaze
Administrator
Zarejestrowany: 2004-04-16

Re: Java-problem z drukowaniem.

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

 

#7  2009-09-04 11:23:31

  sonic81 - Użytkownik

sonic81
Użytkownik
Zarejestrowany: 2006-11-03

Re: Java-problem z drukowaniem.

Nieaktualne już ale dzięki za pomoc.
Pozdro

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Nas ludzie lubią po prostu, a nie klikając w przyciski ;-)