Witam serdecznie forumowiczów! Piszę prostą przeglądarkę plików grafiki rastrowej, kłopot sprawiają mi 2 sprawy:
- Obraz ładuje mi sie jeden na drugim (załączam zrzut ekranu),
- Chcę dodać możliwość zmiany wartości RGB, stworzyłem JSlider, lecz nie mam pojęcia, jak "podpiąć" go do mojego obrazu.
Oto kod.
class okno_glowne extends JFrame implements ActionListener{
public static void main(String[] args){
java.awt.EventQueue.invokeLater(new Runnable(){
public void run(){
new okno_glowne().setVisible(true);
}
});
}
private JPanel rozklad;
private JLabel obszar_rysowania;
private JScrollPane suwaki;
private JSlider rgb;
private JMenuBar pasek;
private JMenuItem otworzp;
private JMenuItem rgbn;
private JMenu plik_,obraz_;
private File plik1;
private BufferedImage obraz;
private String nazwa_pliku,sciezka;
public okno_glowne(){
stworz_okno();
}
public void stworz_okno(){
setVisible(true);
setSize(1000,600);
setTitle("Przeglądarka plików graficznych 1.4 alfa");
setResizable(true);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
rozklad=new JPanel();
pasek=new JMenuBar();
setJMenuBar(pasek);
plik_=new JMenu("Plik");
pasek.add(plik_);
otworzp=new JMenuItem("Otwórz");
otworzp.addActionListener(this);
plik_.add(otworzp);
obraz_=new JMenu("Obraz");
pasek.add(obraz_);
rgbn=new JMenuItem("rgb");
rgbn.addActionListener(this);
obraz_.add(rgbn);
rgbn.setEnabled(false);
}
@Override
public void actionPerformed(ActionEvent e){
try {
String polecenie=e.getActionCommand();
if(polecenie.equals("Otwórz")) otworz();
else if(polecenie.equals("rgb")){
rgb r=new rgb(this,false);
}
} catch (IOException ex) {
Logger.getLogger(okno_glowne.class.getName()).log(Level.SEVERE, null, ex);
}
}
public BufferedImage rysuj(){
obszar_rysowania=new JLabel();
obszar_rysowania.setHorizontalAlignment(JLabel.CENTER);
obszar_rysowania.setVerticalAlignment(JLabel.CENTER);
ImageIcon ii=new ImageIcon(obraz);
obszar_rysowania.setIcon(ii);
suwaki=new JScrollPane(obszar_rysowania);
this.add(suwaki);
revalidate();
repaint(1000);
return obraz;
}
public void otworz() throws IOException{
JFileChooser otworz=new JFileChooser("//");
FileNameExtensionFilter rastrowa=new FileNameExtensionFilter("Pliki grafiki rastrowej(.jpeg,.png.,gif...)", "jpeg","jpg", "gif","png","bmp");
otworz.setFileFilter(rastrowa);
int a=otworz.showOpenDialog(null);
if(a==JFileChooser.APPROVE_OPTION){
nazwa_pliku=otworz.getSelectedFile().getAbsolutePath();
String roz=nazwa_pliku.substring(nazwa_pliku.lastIndexOf('.')+1);
plik1=otworz.getSelectedFile();
obraz=ImageIO.read(plik1);
rysuj();
File plik=new File(nazwa_pliku);
String nazwa_kat=plik.getParent();
System.out.print(nazwa_kat+"/");
rgbn.setEnabled(true);
}
}
}
/////////////////////////////////////////
public class rgb extends JDialog implements ActionListener,ChangeListener{
JButton zatwierdz,anuluj;
JSlider suwaczekR,suwaczekG,suwaczekB,suwaczekA;
JLabel r,g,b,a;
JTextField poleR,poleG,poleB,poleA;
JPanel roz_okienka;
public rgb(java.awt.Frame parent, boolean modal){
super(parent,modal);
stworz_okienko();
}
public void stworz_okienko(){
this.setVisible(true);
this.setTitle("Skala szarości");
this.setResizable(false);
this.setSize(700,700);
this.setLocationRelativeTo(null);
roz_okienka=new JPanel();
zatwierdz=new JButton("Zatwiedz zmiany");
zatwierdz.addActionListener(this);
r=new JLabel("R");
g=new JLabel("G");
b=new JLabel("B");
a=new JLabel("A");
poleR=new JTextField(3);
poleR.addActionListener(this);
poleG=new JTextField(3);
poleG.addActionListener(this);
poleB=new JTextField(3);
poleB.addActionListener(this);
poleA=new JTextField(3);
poleA.addActionListener(this);
suwaczekR=new JSlider(0,255,0);
suwaczekR.setPaintLabels(true);
suwaczekR.setBorder(BorderFactory.createEmptyBorder(0,0,0,0));
suwaczekR.addChangeListener(this);
suwaczekG=new JSlider(0,255,0);
suwaczekG.setPaintLabels(true);
suwaczekG.setBorder(BorderFactory.createEmptyBorder(0,0,0,0));
suwaczekG.addChangeListener(this);
suwaczekB=new JSlider(0,255,0);
suwaczekB.setPaintLabels(true);
suwaczekB.setBorder(BorderFactory.createEmptyBorder(0,0,0,0));
suwaczekB.addChangeListener(this);
suwaczekA=new JSlider(0,255,0);
// suwaczekA.setMajorTickSpacing(255);
// suwaczekA.setMinorTickSpacing(1);
// suwaczekA.setPaintTicks(true);
suwaczekA.setPaintLabels(true);
suwaczekA.setBorder(BorderFactory.createEmptyBorder(0,0,0,0));
suwaczekA.addChangeListener(this);
GroupLayout gr=new GroupLayout(roz_okienka);
roz_okienka.setLayout(gr);
gr.setAutoCreateGaps(true);
gr.setAutoCreateContainerGaps(true);
GroupLayout.SequentialGroup na_szer=gr.createSequentialGroup();
GroupLayout.SequentialGroup na_wys=gr.createSequentialGroup();
GroupLayout.ParallelGroup szerpgr1=gr.createParallelGroup(GroupLayout.Alignment.LEADING);
GroupLayout.ParallelGroup szerpgr2=gr.createParallelGroup(GroupLayout.Alignment.LEADING);
GroupLayout.ParallelGroup szerpgr3=gr.createParallelGroup(GroupLayout.Alignment.LEADING);
szerpgr1.addComponent(r);
szerpgr2.addComponent(suwaczekR);
szerpgr3.addComponent(poleR);
szerpgr1.addComponent(g);
szerpgr2.addComponent(suwaczekG);
szerpgr3.addComponent(poleG);
szerpgr1.addComponent(b);
szerpgr2.addComponent(suwaczekB);
szerpgr3.addComponent(poleB);
szerpgr1.addComponent(a);
szerpgr2.addComponent(suwaczekA);
szerpgr3.addComponent(poleA);
szerpgr2.addComponent(zatwierdz);
na_szer.addGroup(szerpgr1);
na_szer.addGroup(szerpgr2);
na_szer.addGroup(szerpgr3);
GroupLayout.ParallelGroup wyspgr1=gr.createParallelGroup(GroupLayout.Alignment.BASELINE);
GroupLayout.ParallelGroup wyspgr2=gr.createParallelGroup(GroupLayout.Alignment.BASELINE);
GroupLayout.ParallelGroup wyspgr3=gr.createParallelGroup(GroupLayout.Alignment.BASELINE);
GroupLayout.ParallelGroup wyspgr4=gr.createParallelGroup(GroupLayout.Alignment.BASELINE);
GroupLayout.ParallelGroup wyspgr5=gr.createParallelGroup(GroupLayout.Alignment.CENTER);
wyspgr1.addComponent(r);
wyspgr1.addComponent(suwaczekR);
wyspgr1.addComponent(poleR);
wyspgr2.addComponent(g);
wyspgr2.addComponent(suwaczekG);
wyspgr2.addComponent(poleG);
wyspgr3.addComponent(b);
wyspgr3.addComponent(suwaczekB);
wyspgr3.addComponent(poleB);
wyspgr4.addComponent(a);
wyspgr4.addComponent(suwaczekA);
wyspgr4.addComponent(poleA);
wyspgr5.addComponent(zatwierdz);
na_wys.addGroup(wyspgr1);
na_wys.addGroup(wyspgr2);
na_wys.addGroup(wyspgr3);
na_wys.addGroup(wyspgr4);
na_wys.addGroup(wyspgr5);
gr.setHorizontalGroup(na_szer);
gr.setVerticalGroup(na_wys);
add(roz_okienka);
pack();
}
@Override
public void actionPerformed(ActionEvent e) {
Object zrodlo=e.getSource();
int wartA=Integer.parseInt(poleA.getText());
if(zrodlo==poleA){
if(wartA>255) suwaczekA.setValue(255);
else if(wartA<0) suwaczekA.setValue(0);
else suwaczekA.setValue(wartA);
}
}
@Override
public void stateChanged(ChangeEvent e) {
Object zrodlo=e.getSource();
if(zrodlo==suwaczekA){
if (!suwaczekA.getValueIsAdjusting()) {
int wartosc=suwaczekA.getValue();
poleA.setText(Integer.toString(wartosc));
zmien_A(wartosc);
}
}
}
private void zmien_A(int wartosc){
okno_glowne og=new okno_glowne();
BufferedImage img=og.rysuj();
wartosc %= 0xff;
for(int cx=0;cx<img.getWidth();cx++){
for(int cy=0;cy<img.getHeight();cy++){
int color=img.getRGB(cx, cy);
int mc=(wartosc << 24) | 0x00ffffff;
int newcolor = color & mc;
img.setRGB(cx, cy, newcolor);
}
}
}
}
- newbitmapimageqn.png (2 MB) - ściągnięć: 208
niezdecydowany