Java中SampleModel之间的区别?

时间:2017-07-27 18:51:47

标签: java image-processing bufferedimage convolution javax.imageio

所以我花了很多时间来解决我在代码中遇到的一个问题,而且我对一些细节非常感兴趣。我写了一篇关于我到底做了什么的部分。

所以我读取图片我想用

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文档,但它们似乎要么太缺乏,要么太抽象,无法让我理解。

至于我编码的东西,我正在使用图像进行内核卷积,如模糊,边缘检测等。我只是想将源图像复制到目标图像,因为我没有做任何边缘包装/剪裁我不希望新创建的图像的边缘为空。

0 个答案:

没有答案