SWT IMAGE的裁剪

public class ImageCut{
 private static Log ImageCutLog = LogFactory.getLog(ImageCut.class); 
 @SuppressWarnings("unchecked")
 public static Image readUsingImageReader(Display display, Image oldImage, int locax, int locay, int width, int height){
     Image newImage = null;
     
        // 取得图片读入器
     byte[] outdata = new byte[0];
  ByteArrayOutputStream out = new ByteArrayOutputStream();
        ImageLoader imageLoader = new ImageLoader();
        imageLoader.data = new ImageData[]{oldImage.getImageData()};
        imageLoader.save(out, SWT.IMAGE_JPEG);
        try {
   outdata = out.toByteArray();
   out.flush();
  } catch (IOException e1) {
   // TODO Auto-generated catch block
   ImageCutLog.error(e1);
  }finally{
   try {
    out.close();
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }

        ByteArrayInputStream source = new ByteArrayInputStream(outdata);
        Iterator readers = ImageIO.getImageReadersByFormatName("jpg");
        ImageReader reader = (ImageReader)readers.next();
        ImageInputStream iis;
  try {
   iis = ImageIO.createImageInputStream(source);
         reader.setInput(iis, true);    
  } catch (IOException e2) {
   // TODO Auto-generated catch block
   ImageCutLog.error(e2);
   return newImage;
  }


        // 取得裁剪图片
        ImageReadParam param = reader.getDefaultReadParam();
        Rectangle rect = new Rectangle(locax, locay, width, height);
        param.setSourceRegion(rect);
        BufferedImage bi;
  try {
   bi = reader.read(0,param);
  } catch (IOException e2) {
   // TODO Auto-generated catch block
   ImageCutLog.error(e2);
   return newImage;
  }             
        try {   
   byte[] outdatacut = new byte[0];
   ByteArrayOutputStream outscale = new ByteArrayOutputStream();
         JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(outscale);  
         encoder.encode(bi);
         try {
          outdatacut = outscale.toByteArray();
          outscale.flush();
   } catch (IOException e1) {
    // TODO Auto-generated catch block
    ImageCutLog.error(e1);
   }finally{
    try {
     outscale.close();
    } catch (IOException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
   }

         ByteArrayInputStream incut = new ByteArrayInputStream(outdatacut);
         newImage = new Image(display, incut);
  } catch (Exception e) {
   // TODO Auto-generated catch block
   ImageCutLog.error(e);
  }      

        return newImage;
    }
   
    public static void main(String[] args){
        ImageLoader loader1 = new ImageLoader();
        loader1.load("d://shell.JPG");
        Image old = new Image(Display.getDefault(), loader1.data[0]);
       
        Image news = readUsingImageReader(Display.getDefault(),old,100,100,100,100);
        if(null != news){
         ImageLoader loader2 = new ImageLoader();
         loader2.data = new ImageData[]{news.getImageData()};
         loader2.save("d://1123.jpg", SWT.IMAGE_JPEG);
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值