* 文 件 名: CropImage.java
* 描 述: <描述>
* 修改时间: 2018年3月1日
*/
package test;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.image.BufferedImage;
import java.awt.image.MemoryImageSource;
import java.awt.image.PixelGrabber;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.LineBorder;
/**
* <一句话功能简述>
* <功能详细描述>
*
* @version [版本号, 2018年3月1日]
* @see [相关类/方法]
* @since [产品/模块版本]
*/
public class CropImage extends JFrame{
private static final long serialVersionUID=-21212221;
public static void main(String[] args){
CropImage test = new CropImage();
test.setVisible(true);
}
private MediaTracker tracker;
private PixelGrabber maskPg;
private PixelGrabber sourcePg;
private Image backgroundImage;
private Image maskImage;//蒙版图片
private Image sourceImage;//原图片
private Image resultImage;
private BackgroundPanel backPanel;
private RocketPanel rocketPanel;
public CropImage(){
super();
setBounds(100,100,500,500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
loadImage();
setResultImage(sourceImage,maskImage);
backPanel=new BackgroundPanel();
backPanel.setLayout(null);
rocketPanel=new RocketPanel();
rocketPanel.setBorder(new LineBorder(Color.WHITE));
setContentPane(backPanel);
rocketPanel.setBounds(200,200,42,42);
backPanel.add(rocketPanel);
}
/** <一句话功能简述>
* <功能详细描述>
* @param sourceImage2
* @param maskImage2
* @see [类、类#方法、类#成员]
*/
private void setResultImage(Image source, Image mask) {
int mw=mask.getWidth(this);
int mh=mask.getHeight(this);
int[] mPixs=new int[mw * mh];
int sw=source.getWidth(this);
int sh=source.getHeight(this);
int[] sPixs=new int[sw*sh];
maskPg=new PixelGrabber(mask,0,0,mw,mh,mPixs,0,mw);
sourcePg=new PixelGrabber(source,0,0,sw,sh,sPixs,0,sw);
try{
maskPg.grabPixels();
sourcePg.grabPixels();
}catch(InterruptedException e){
System.err.println("interrupted waiting for pixels!");
return;
}
int[] rPixels=new int[sw*sh];
for(int i=0;i<rPixels.length;i++){
rPixels[i]=sPixs[i];
System.out.println(mPixs[i]);
int mPixelReg=mPixs[i] & 0x00ffffff;
if(mPixelReg<0x00ffffff){
rPixels[i]=rPixels[i] & 0x00ffffff;
}
}
resultImage=createImage(new MemoryImageSource(sw,sh,rPixels,0,sw));
BufferedImage rImage = new BufferedImage(100,100,BufferedImage.TYPE_4BYTE_ABGR);
Graphics g=rImage.getGraphics();
g.drawImage(resultImage,0,0,null);
try{
ImageIO.write(rImage, "png", new File("D:/jewel.png"));
}catch(IOException e){
e.printStackTrace();
}
}
/** <一句话功能简述>
* <功能详细描述>
* @see [类、类#方法、类#成员]
*/
private void loadImage() {
// TODO Auto-generated method stub
tracker=new MediaTracker(this);
try{
backgroundImage=ImageIO.read(new File("D:/3.jpg"));
tracker.addImage(backgroundImage, 0);
maskImage=ImageIO.read(new File("D:/zhang.jpg"));
tracker.addImage(maskImage, 1);
sourceImage=ImageIO.read(new File("D:/yuan.jpg"));
tracker.addImage(sourceImage, 1);
}catch(IOException e){
e.printStackTrace();
}
try{
tracker.waitForID(0);
tracker.waitForID(1);
}catch(InterruptedException e){
e.printStackTrace();
}
}
private class BackgroundPanel extends JPanel{
private static final long serialVersionUID = 4503016479516384644L;
@Override
protected void paintComponent(Graphics g){
super.paintComponent(g);
if(backgroundImage!=null){
int w=BackgroundPanel.this.getWidth();
int h=BackgroundPanel.this.getHeight();
g.drawImage(backgroundImage, 0, 0, w,h,null);
}
}
}
private class RocketPanel extends JPanel{
private static final long serialVersionUID = 1204792957097831219L;
public RocketPanel(){
super();
setOpaque(false);
}
@Override
protected void paintComponent(Graphics g){
super.paintComponent(g);
if(resultImage!=null){
int w=RocketPanel.this.getWidth();
int h=RocketPanel.this.getHeight();
g.drawImage(resultImage, 0, 0, w,h,null);
}
}
}
}
5103



被折叠的 条评论
为什么被折叠?



