import javax.swing.*;
import javax.swing.event.*;
import java.io.*;
import javax.media.*;
import javax.media.format.*;
import javax.media.util.*;
import javax.media.control.*;
import javax.media.protocol.*;
import java.util.*;
import java.awt.*;
import java.awt.image.*;
import java.awt.event.*;
import com.sun.image.codec.jpeg.*;
public class SwingCapture extends Panel implements ActionListener
{
public static Player player = null;
public CaptureDeviceInfo di = null;
public MediaLocator ml = null;
public JButton capture = null;
public Buffer buf = null;
public Image img = null;
public VideoFormat vf = null;
public BufferToImage btoi = null;
public ImagePanel imgpanel = null;
private JLabel lb1;
public SwingCapture()
{
setLayout(new BorderLayout());
setSize(320,550);
imgpanel = new ImagePanel();
lb1 = new JLabel("Position X");
lb1.setSize(lb1.getPreferredSize());
capture = new JButton("Capture");
capture.addActionListener(this);
String str1 = "vfw:Logitech USB Video Camera:0";
String str2 = "vfw:Microsoft WDM Image Capture (Win32):0";
di = CaptureDeviceManager.getDevice(str2);
ml = di.getLocator();
try
{
player = Manager.createRealizedPlayer(ml);
player.start();
Component comp;
if ((comp = player.getVisualComponent()) != null)
{
add(comp,BorderLayout.NORTH);
}
add(lb1,BorderLayout.SOUTH);
add(capture,BorderLayout.CENTER);
add(imgpanel,BorderLayout.SOUTH);
}
catch (Exception e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
Frame f = new Frame("SwingCapture");
SwingCapture cf = new SwingCapture();
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
playerclose();
System.exit(0);}});
f.add("Center",cf);
f.pack();
f.setSize(new Dimension(320,550));
f.setVisible(true);
}
public static void playerclose()
{
player.close();
player.deallocate();
}
public void actionPerformed(ActionEvent e)
{
JComponent c = (JComponent) e.getSource();
if (c == capture)
{
// Grab a frame
FrameGrabbingControl fgc = (FrameGrabbingControl)
player.getControl("javax.media.control.FrameGrabbingControl");
buf = fgc.grabFrame();
// Convert it to an image
btoi = new BufferToImage((VideoFormat)buf.getFormat());
img = btoi.createImage(buf);
// show the image
imgpanel.setImage(img);
// save image
saveJPG(img,"c:\\test.jpg");
}
}
class ImagePanel extends Panel
{
public Image myimg = null;
public ImagePanel()
{
setLayout(null);
setSize(320,240);
}
public void setImage(Image img)
{
this.myimg = img;
repaint();
}
public void paint(Graphics g)
{
if (myimg != null)
{
g.drawImage(myimg, 0, 0, this);
}
}
}
public static void saveJPG(Image img, String s)
{
BufferedImage bi = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = bi.createGraphics();
g2.drawImage(img, null, null);
FileOutputStream out = null;
try
{
out = new FileOutputStream(s);
}
catch (java.io.FileNotFoundException io)
{
System.out.println("File Not Found");
}
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bi);
param.setQuality(0.5f,false);
encoder.setJPEGEncodeParam(param);
try
{
encoder.encode(bi);
out.close();
}
catch (java.io.IOException io)
{
System.out.println("IOException");
}
}}
import java.awt.Image;
import java.awt.Toolkit;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.ImageIcon;
public class JLabelUeberImageProblem extends JFrame{
/**
*
*/
private static final long serialVersionUID = 1L;
/**
* @param args
*/
static JLabel label, Schrift;
public JLabelUeberImageProblem(){
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(null);
Image image = Toolkit.getDefaultToolkit().createImage("C:\\Bild"); // Hier wird ein Bild aufgerufen, bei mir ein Bild von einem Monopoly-Spielbrett
label = new JLabel(new ImageIcon(image));
JScrollPane pane = new JScrollPane(label); // Hier pack ich das Bild in ein JScrollPane, wiel es so groß ist (fuer ein Spiel)
pane.setSize(300, 300);
getContentPane().add(pane); // Zuerst wird das JScrollPane angeschlossen...
Schrift = new JLabel("AAAAAAA"); // Schriftzug, der ueber das Bild kommen soll (Beispieltest)
Schrift.setSize(100, 50);
Schrift.setLocation(50, 50);
getContentPane().add(Schrift); // und dann erst der Schriftzug
}
public static void main(String[] args) {
JLabelUeberImageProblem W = new JLabelUeberImageProblem();
W.setSize(300, 300);
W.setLocation(300, 300);
W.setVisible(true);
}
}
content = new JPanel();
Spieler1 = new JLabel("TESTTESTTESTTEST");
Spieler1.setSize(100, 50);
// Spieler1.setOpaque(true);
Spieler1.setLocation(800, 100);
content.add(Spieler1);
glassPanel = new JPanel();
glassPanel.setOpaque(false);
glassPanel.add(Spielfeld);
JLayeredPane p = new JLayeredPane()
{
@SuppressWarnings("deprecation")
@Override
public void reshape(int x, int y, int width, int height)
{
super.reshape(x, y, width, height);
for (Component c : getComponents())
{
c.reshape(x, y, width, height);
}
}
};
p.add(glassPanel, JLayeredPane.FRAME_CONTENT_LAYER);
p.add(content, JLayeredPane.POPUP_LAYER);
public void paintComponent(Graphics g){
super.paintComponent(g);
g.drawImage(deinBufferedImage, 0, 0, null);
}
Wenn der AKüFi Pause hat ist das die Suchfunktion.Und was ist ein SuFu?
Die ehrliche oder die höfliche Antwort?Ich bin doof![]()
Ist das jetzt die Methode für das Hintergrundbild oder für das daraufzusetzende JLabel?
Und funktioniert das mit einem JScrollPane? Google gibt mir da auch keine Antwort...