[code="java"]
public static boolean cutImage(Image srcImage, MyRectangle rect, String destPath) {
int x = rect.x;
int y = rect.y;
int w = rect.width;
int h = rect.height;
if (h < 1 || w < 1) {
return true;
}
int [] pixels = ((BufferedImage)srcImage).getRGB(x, y, w, h, null, 0, w);
DataBuffer dataBuffer = new DataBufferInt(pixels, w*h);
WritableRaster raster = Raster.createPackedRaster (dataBuffer, w, h,w, new int [] { 0xFF0000, 0xFF00, 0xFF }, null );
DirectColorModel directColorModel = new DirectColorModel(24, 0xFF0000, 0xFF00, 0xFF);
BufferedImage image = new BufferedImage(directColorModel, raster, true , null );
try {
ImageWriter writer = null;
// float quality = CommonGlobalUtil.quality;
//这里将适量设置为1.0 一样会有失真
float quality = 1.0f;
String formatName = "JPEG";
if(rect.isIsCustomSet()){
quality = rect.getQuatity();
formatName = rect.getFormat();
}
Iterator iter = ImageIO.getImageWritersByFormatName(formatName);
if (iter.hasNext()) {
writer = (ImageWriter) iter.next();
}
if (writer == null) {
logger.error("writer=null");
return false;
}
IIOImage iioImage = new IIOImage(image, null, null);
ImageWriteParam param = writer.getDefaultWriteParam();
if(formatName.equalsIgnoreCase("JPEG")) {
param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
param.setCompressionQuality(quality);
}
File file = new File(destPath);
if (!file.getParentFile().exists()) {
boolean b = file.getParentFile().mkdirs();
}
ImageOutputStream outputStream = ImageIO.createImageOutputStream(file);
writer.setOutput(outputStream);
writer.write(null, iioImage, param);
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
return false;
}
return true;
}
[/code]
[quote]Not a Sun raster file. [/quote] 你下的包还有其他dll文件吗,试试放到system32目录下再运行.
[code="java"]package com.cayden.video01;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Panel;
import java.awt.image.BufferedImage;
import java.io.FileOutputStream;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
class ImagePanel extends Panel {
private static final long serialVersionUID = 1L;
public Image myimg = null;
public ImagePanel() {
setLayout(null);
setSize(240, 180);
}
public void setImage(Image img) {
this.myimg = img;
repaint();
}
//显示图片
public void paint(Graphics g) {
if (myimg != null) {
g.drawImage(myimg, 0, 0, this);
}
}
//保存图片
public void saveImage(Image image, String path) {
//图片缓存
int width = image.getWidth(null);
int height = image.getHeight(null);
BufferedImage bi = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = bi.createGraphics();
g2.drawImage(image, null, null);
//写入文件
try {
//打开文件
FileOutputStream fos = new FileOutputStream(path);
//JPG编码
JPEGImageEncoder je = JPEGCodec.createJPEGEncoder(fos);
JPEGEncodeParam jp = je.getDefaultJPEGEncodeParam(bi);
jp.setQuality(1f, false);
je.setJPEGEncodeParam(jp);
je.encode(bi);
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}[/code]
这个是对图片处理
下面是点击拍照的方法.
[code="java"]/**
* 拍照
* @param evt
*/
private void captureButtonActionPerformed(java.awt.event.ActionEvent evt){
imagePanel=new ImagePanel();
FrameGrabbingControl fgc = (FrameGrabbingControl) playhelper.getPlayer()
.getControl("javax.media.control.FrameGrabbingControl");
Buffer buffer = fgc.grabFrame();
BufferToImage bufferToImage = new BufferToImage(
(VideoFormat) buffer.getFormat());
Image image = bufferToImage.createImage(buffer);
imagePanel.setImage(image);
String filepath="D:/app/"+UUID.randomUUID().toString()+".jpg";
imagePanel.saveImage(image, filepath);
JOptionPane.showMessageDialog(this,
"已经保存在"+filepath, "提示", JOptionPane.INFORMATION_MESSAGE);
}[/code]
[quote]Not a Sun raster file.