我试图采取一个BufferedImage,适用傅立叶变换(使用jtransforms),和编写的数据回到BufferedImage.但我坚持创建一个新的光栅设定的结果后,我失去了一些东西在这里?

BufferedImage bitmap;
float [] bitfloat = null;

bitmap = ImageIO.read(new File("filename"));
FloatDCT_2D dct = new FloatDCT_2D(bitmap.getWidth(),bitmap.getHeight());

bitfloat = bitmap.getData().getPixels(0, 0, bitmap.getWidth(), bitmap.getHeight(), bitfloat);
dct.forward(bitfloat, false);

但我很难想干掉这一行的,什么我应该得到createRaster功能?Javadocs为createRaster做没有意义的对我说:

bitmap.setData(Raster.createRaster(`arg1`, `arg2`, `arg3`));

我开始不知道如果一个漂浮阵列甚至是必要的,但是没有许多实例jtransforms在那里。

有帮助吗?

解决方案

不要创建一个新的 Raster.使用 WritableRaster.setPixels(int,int,int,int,float[]) 写阵列回到图像。

final int w = bitmap.getWidth();
final int h = bitmap.getHeight();

final WritableRaster wr = bitmap.getData();
bitfloat = wr.getPixels(0, 0, w, h, bitfloat);

// do processing here

wr.setPixels(0, 0, w, h, bitfloat);    

还注意到,如果你打算来显示这些图像,你真的应该复制它 屏幕兼容的类型;ImageIO很少返回的那些。

其他提示

我在做谷歌搜索FloatDCT_2D看什么包/库它在,它看起来像有几个引用各种来源,如“edu.emory.mathcs.jtransforms.dct.FloatDCT_2D”。不知道你正在使用的定制库,这真的很难给你如何进行转换的任何建议。

我的猜测是在一般情况下,你应该读取来自原始栅格的输入数据,执行转换的原始数据,然后写入输出到一个新的栅格。

不过,您的最后一个语句都在它自己看起来很奇怪... Raster.createRaster()看起来像你调用一个类没有参数,你从来没有在您发布的代码中引用的静态方法。如何是你的位图,它生成的数据???即使在伪代码,你需要把你的成果转化和建立最终的光栅。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top