所以我花了很多时间来解决我在代码中遇到的一个问题,而且我对一些细节非常感兴趣。我写了一篇关于我到底做了什么的部分。
所以我读取图片我想用
static BufferedImage img = null;
img = ImageIO.read(new File("/home/user/doggo.jpg"));
然后创建了一个BufferedImage对象来存储更改,我将会这样做。
BufferedImage newimg = new BufferedImage(img.getWidth(), img.getHeight(), BufferedImage.TYPE_INT_RGB);
因为图像的某些部分不会改变,我想通过这样做来“复制” BufferedImage到另一个(所以不会有空位): / p>
newimg = img;
因此,当我运行我的代码时,有时图像会扭曲,像素化或不符合我的期望。我知道我的算法是正确的100%,并且没有办法为什么它不起作用。
事实证明,至少我认为我将一种的BufferedImage “复制”为另一种类型。
img.getType()
已退回
1
img.getColorModel()
返回:
DirectColorModel:rmask = ff0000 gmask = ff00 bmask = ff amask = 0
和img.getSampleModel()
返回:
java.awt.image.SinglePixelPackedSampleModel@8080b20
对于我新获得的新创建的 BufferedImage:
newimg.getType()
已退回
5
newimg.getColorModel()
返回:
ColorModel:#pixelBits = 24 numComponents = 3 color space = java.awt.color.ICC_ColorSpace@76fb509a transparency = 1 has alpha = false isAlphaPre = false
和newimg.getSampleModel()
返回:
java.awt.image.PixelInterleavedSampleModel@3086002
我最感兴趣的是 ImageIO如何将图像读入BufferedImage?它如何定义它将是什么类型的BufferedImage。我正在阅读的图像是一个普通的jpeg文件,它有RGB值,所以我认为复制像这样的BufferedImage对象不会造成太大的伤害。到现在为止,我意识到它并不像我想象的那么简单,但我仍然对背景中发生的事情一无所知。我试过阅读oracle文档,但它们似乎要么太缺乏,要么太抽象,无法让我理解。
至于我编码的东西,我正在使用图像进行内核卷积,如模糊,边缘检测等。我只是想将源图像复制到目标图像,因为我没有做任何边缘包装/剪裁我不希望新创建的图像的边缘为空。