ok wkleje caly kod bedzie moze latwiej o dogadanie sie. obraz1 to zwykly BufferedImage, i jest on ladowany z pliku.
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
import java.awt.image.WritableRaster;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.UIManager;
public class Glowna {
public static void main(String[] args) {
JFrame frame = new Ramka();
frame.setSize(1000,800);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.show();
}
}
class Ramka extends JFrame
{
BufferedImage obraz1, obraz2;
private static final long serialVersionUID = 1L;
public Ramka()
{
setTitle("Kozieja Karolik, grafika komputerowa-projekt");
setSize(WIDTH, HEIGHT);
JPanel panel=new
JPanel()
{
/**
*
*/
private static final long serialVersionUID = 1L;
public void paintComponent(Graphics g)
{
//g.setPaint(new GradientPaint(0, 0, new Color(0, 150, 0), 20, 20,
// new Color(50, 150, 50, 80), true));
//g.setColor(new Color(150,150, 150, 80));
super.paintComponent(g);
if(obraz1 != null)
g.drawImage(obraz1, 0, 0, null);
if(obraz2 != null)
g.drawImage(obraz2, 0, 0, null);
}
};
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception exception) {
exception.printStackTrace();
}
getContentPane().add(panel, BorderLayout.CENTER);
JMenu fileMenu = new JMenu("File");
JMenuItem openItem = new JMenuItem("Otworz");
openItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
openFile();
}
});
fileMenu.add(openItem);
JMenuItem exitItem = new JMenuItem("Zakoncz");
exitItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
System.exit(0);
}
});
fileMenu.add(exitItem);
JMenu opcjeMenu = new JMenu("Opcje");
JMenuItem przezrocz = new JMenuItem("Nadaj przezroczystosc");
przezrocz.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
obraz1=przezroczystosc(50,obraz1);
repaint();
/*if (obraz1!=null) {
obraz2=przezroczystosc(50,obraz2);
} else {
obraz1=przezroczystosc(50,obraz1);
// obraz1=moja(obraz1);
}
*/
}
});
opcjeMenu.add(przezrocz);
JMenu infoMenu = new JMenu("Info");
JMenuItem autorzy = new JMenuItem("autorzy");
przezrocz.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
//wstawimy info o nas :)
}
});
infoMenu.add(autorzy);
JMenuBar menuBar = new JMenuBar();
menuBar.add(fileMenu);
menuBar.add(opcjeMenu);
menuBar.add(infoMenu);
setJMenuBar(menuBar);
}
private BufferedImage przezroczystosc(int procent, BufferedImage obraz1)
{ int width=obraz1.getWidth(),height=obraz1.getHeight();
WritableRaster raster = obraz1.getRaster(); //umozliwia operacje na pojedynczych pixelach
Color obraz[][] = new Color[width][height];
Color obrazwyj[][] = new Color[width][height];
ColorModel model = obraz1.getColorModel(); //dzieki temu mozemy obsluzyc wiele formatow plikow(ale i tak nie dziala:))
Object data;int argb;
for(int x=0;x<width;x++)
{
for(int y=0;y<height;y++)
{
data= raster.getDataElements(x, y, null); //zwraca informacje o kolorze pixela
argb = model.getRGB(data);
obraz[x][y]=new Color(argb);
}
}
int i,j,red,green,blue;
for(i=0;i<width;i++){
for(j=0;j<height;j++){
red=0;green=0;blue=0;
red+=obraz[i][j].getRed();
green+=obraz[i][j].getGreen();
blue+=obraz[i][j].getBlue();
obrazwyj[i][j]=new Color(red,green,blue,255);
}
}
for(int x=1;x<width;x++)
{
for(int y=1;y<height;y++)
{
argb=obrazwyj[x][y].getRGB();
data = model.getDataElements(argb,null);
raster.setDataElements(x,y,data);
}
}
return obraz1;
//repaint();
}
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")
|| name.endsWith(".png")
|| f.isDirectory();
}
public String getDescription() {
// TODO Auto-generated method stub
return "Image files";
}
});
int r = chooser.showOpenDialog(this);
if(r != JFileChooser.APPROVE_OPTION) return;
try
{
if (obraz1!=null) {
obraz2 = ImageIO.read(chooser.getSelectedFile());
} else {
obraz1 = ImageIO.read(chooser.getSelectedFile());
//obraz1=new BufferedImage(obraz1.getWidth(),height,BufferedImage.OPAQUE);
// obraz1=moja(obraz1);
}
}
catch (IOException exception)
{
JOptionPane.showMessageDialog(this, exception);
}
repaint();
}
/**
filtr obrazu
*/
private static final int WIDTH = 400;
private static final int HEIGHT = 400;
}