2016-06-08 45 views
0

我试图使用Java来裁剪图像,这里是我的代码:的java croped图像全黑

import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.IOException; 
import javax.imageio.ImageIO; 

public class crop 
{ 
    public static void main(String[] args) 
    { 

     BufferedImage img = null; 
     try 
     { 
      img = ImageIO.read(new File("/Users/mathewlewis/desktop/pic.jpg")); 
      String width = "" + img.getWidth(); 
      String height = "" + img.getHeight(); 
      cout("heigth = " + height + " and width = " + width); 
      BufferedImage crp = img.getSubimage(0,0,100,200); 


      try { 
       File outputfile = new File("crop_pic.jpg"); 
       ImageIO.write(crp, "jpg", outputfile); 
      } 
      catch (IOException e) 
      { 
       System.out.println("error"); 
      } 

     } 
     catch (IOException e) 
     { 
      System.out.println("error"); 
     } 
    } 
} 

一切运行正常(没有错误),但是当我打开crop_pic.jpg它是全黑的。这里是pic.jpg

我想知道为什么图像全黑,以及如何修复它。

我想这

import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.IOException; 
import javax.imageio.ImageIO; 

public class crop 
{ 
    public static void main(String[] args) 
    { 

     BufferedImage img = null; 
     try 
     { 
      img = ImageIO.read(new File("/Users/mathewlewis/desktop/pic.jpg")); 
      BufferedImage rgbImage = new BufferedImage(img.getWidth(), img.getHeight(), BufferedImage.TYPE_3BYTE_BGR); 
      ColorConvertOp op = new ColorConvertOp(null); 
      op.filter(img, rgbImage); 
      BufferedImage crp = rgbImage.getSubimage(300,300,rgbImage.getWidth()-300,rgbImage.getHeight()-300); 





      try { 
       File outputfile = new File("crop_pic.jpg"); 
       ImageIO.write(crp, "jpg", outputfile); 
      } 
      catch (IOException e) 
      { 
       System.out.println("error"); 
      } 

     } 
     catch (IOException e) 
     { 
      System.out.println("error"); 
     } 
    } 
} 

,并得到这个错误:

crop.java:16: error: cannot find symbol 
      ColorConvertOp op = new ColorConvertOp(null); 
      ^
    symbol: class ColorConvertOp 
    location: class crop 
crop.java:16: error: cannot find symbol 
      ColorConvertOp op = new ColorConvertOp(null); 
            ^
    symbol: class ColorConvertOp 
    location: class crop 
2 errors 

谢谢Forseth11!应该注意到我没有导入java.awt.image.ColorConvertOp!你一直在帮助很大。非常感谢!!!

+0

Re。编译器错误,请尝试'导入''ColorConvertOp'('java.awt.image.ColorConvertOp')。 – haraldK

回答

1

我环顾了一下,发现其他人也有类似的问题。在测试这个结果时,我得到了一个奇怪的彩色图像,而不是黑色的图像。此问题是由于ImageIO错误地读取图像造成的。

下面是我想出了哪些作品,但由于我无法复制您的问题并获得黑色图像,因此这可能对您无效。

img = ImageIO.read(new File("/Users/mathewlewis/desktop/pic.jpg")); 

BufferedImage rgbImage = new BufferedImage(img.getWidth(), img.getHeight(), 
BufferedImage.TYPE_3BYTE_BGR); 
ColorConvertOp op = new ColorConvertOp(null); 
op.filter(img, rgbImage); 

String width = "" + rgbImage.getWidth(); 
String height = "" + rgbImage.getHeight(); 
System.out.println("heigth = " + height + " and width = " + width); 

BufferedImage crp = rgbImage.getSubimage(300,300,rgbImage.getWidth()-300,rgbImage.getHeight()-300); 

这些都是有类似的问题,一些其他职位:

编辑:我改变的地方冒出,所以很容易看到,因为图像的左上部分大部分是黄色的。

+0

我尝试了您的建议,并在尝试编译时遇到错误(请参阅编辑的问题) – mathew

+0

@mathew是否导入了ColorConvertOp? 'import java.awt.image.ColorConvertOp;' – Forseth11