java裁剪图像全黑

标签 java bufferedimage

我正在尝试使用java裁剪图像,这是我的代码:

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!你帮了很大的忙。非常感谢!!!

最佳答案

我环顾四周,发现其他人也遇到了类似的问题。在我测试时,我得到了一个奇怪的彩色图像,而不是黑色图像。这个问题是因为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);

这些是其他一些具有类似问题的帖子:

编辑:我改变了裁剪的位置,因此很容易看到,因为图像的左上部分大部分是黄色的。

关于java裁剪图像全黑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37691789/

相关文章:

java - 如何 "un-sort"一个JTable?

java - 如何序列化包含 BufferedImages 的对象

java - 保存使用graphics2d、java绘制的缓冲图像

Java双缓冲——访问后像

java - JSPG0122E : Unable to parse EL function in Websphere 8

java - 哪些库支持 Java 6 ServiceLoader 工具(META-INF/services)?

java - TextView 旋转时从屏幕上消失

Java - 改变斐波那契兔子 - Java 堆空间错误

Java BufferedImage 到剪贴板给出 IIOException

java - 如何在java中确定bufferedimage颜色类型