2016-06-08 2 views
0

Я пытаюсь обрезать изображение с помощью 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. ошибка компилятора, попробуйте 'import'ing' 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); 

Вот некоторые другие должности, которые имеют такой же вопрос:

Edit: Я изменил где обрезаны, так что легко увидеть, потому что верхняя левая часть изображения в основном желтая.

+0

Я пробовал то, что вы предложили, и получил ошибку, когда я попытался ее скомпилировать (см. Отредактированный вопрос) – mathew

+0

@mathew Вы импортировали ColorConvertOp? 'import java.awt.image.ColorConvertOp;' – Forseth11