2016-06-08 2 views
0
noir

Je suis en train de recadrer une image à l'aide d'une java, voici mon code:java image croped tous

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"); 
     } 
    } 
} 

Tout fonctionne très bien (pas d'erreur), mais quand je l'ouvre crop_pic.jpg il est tout noir. Voici pic.jpg.

Je voudrais savoir pourquoi l'image sort tout noir, et comment je peux le réparer.

J'ai essayé

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"); 
     } 
    } 
} 

et a obtenu cette erreur:

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 

Merci Forseth11 !! aurait dû remarquer que je n'ai pas importé java.awt.image.ColorConvertOp! Vous avez été d'une grande aide. Merci beaucoup!!!

+0

Re. l'erreur du compilateur, essayez 'import'ing' ColorConvertOp' ('java.awt.image.ColorConvertOp'). – haraldK

Répondre

1

J'ai regardé un peu autour de moi et j'ai constaté que d'autres personnes avaient eu un problème similaire. De mon côté, quand j'ai testé ceci, j'ai obtenu une image étrangement colorée, pas une image noire. Ce problème est dû au fait que ImageIO lit l'image incorrecte.

Voici ce que j'ai trouvé qui fonctionne, mais comme je ne pouvais pas reproduire votre problème et obtenir une image noire cela peut ne pas fonctionner pour vous.

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); 

Ce sont là quelques autres postes qui ont un problème similaire:

Edit: J'ai changé où il recadrée, il est donc facile de voir parce que la partie supérieure gauche de l'image est principalement jaune.

+0

J'ai essayé ce que vous avez suggéré et j'ai eu une erreur quand j'ai essayé de le compiler (voir la question éditée) – mathew

+0

@mathew avez-vous importé ColorConvertOp? 'import java.awt.image.ColorConvertOp;' – Forseth11