我正在尝试从我的网络摄像头捕获图像,但是我的saveJPG
方法出错了。
错误:
Multiple markers at this line
- Access restriction: The type JPEGCodec is not accessible due to restriction on required library C:\Program Files\Java\jre7\lib\rt.jar
- Access restriction: The method createJPEGEncoder(OutputStream) from the type JPEGCodec is not accessible due to restriction on required library C:
\Program Files\Java\jre7\lib\rt.jar
- Access restriction: The type JPEGImageEncoder is not accessible due to restriction on required library C:\Program Files\Java\jre7\lib\rt.jar
我的saveJPG
方法中出现此错误
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bi);
param.setQuality(0.5f,false);
encoder.setJPEGEncodeParam(param);
CODE:
JButton startC = new JButton("Capturar");
startC.setPreferredSize(new Dimension(100,22));
startC.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
// 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");
}
});
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 static com.googlecode.javacv.jna.highgui.cvCreateCameraCapture;
import static com.googlecode.javacv.jna.highgui.cvGrabFrame;
import static com.googlecode.javacv.jna.highgui.cvReleaseCapture;
import com.googlecode.javacv.CanvasFrame;
import com.googlecode.javacv.FrameGrabber;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import com.colorfulwolf.webcamapplet.gui.LabelPanel;
import com.colorfulwolf.webcamapplet.gui.LoadingScreen;
import com.googlecode.javacv.jna.highgui.CvCapture;
import java.awt.BorderLayout;
import javax.media.*;
import javax.media.protocol.*;
import javax.media.util.BufferToImage;
import javax.swing.*;
import java.awt.*;
import java.util.*;
import javax.media.control.*;
import javax.media.format.*;
import com.sun.image.codec.jpeg.*;
答案 0 :(得分:14)
Eclipse Java编译器试图阻止您使用非公共API。 在经典Java中,可见性概念非常原始,因此库设计者通常必须放入仅供内部使用的公共空间类。 对于诸如OSGi之类的更进化的框架,情况并非如此。
如果您仍想访问此课程,可以按照this blog post。
中的说明进行操作答案 1 :(得分:10)
我可以按照以下建议摆脱这个错误: