3

我正在尝试获取 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 函数什么?createRaster 的 javadocs 对我来说意义不大:

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

我开始怀疑是否需要一个浮点数组,但是那里没有很多 jtransforms 的例子。

4

2 回答 2

4

不要创建新的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 很少返回那些。

于 2010-10-28T10:01:35.630 回答
0

我正在 Google 搜索 FloatDCT_2D 以查看它所在的包/库,并且看起来有多个对各种来源的引用,例如“edu.emory.mathcs.jtransforms.dct.FloatDCT_2D”。在不知道您使用的是什么自定义库的情况下,很难就如何执行转换给您任何建议。

我的猜测通常是,您应该从原始栅格读取输入数据,对原始数据执行转换,然后将输出写入新栅格。

但是,您最后的声明本身看起来很奇怪...... Raster.createRaster()看起来您正在调用一个没有参数的静态方法,您从未在您发布的代码中引用过。那是如何为您的位图生成数据的???即使在伪代码中,您也需要获取转换结果并构建结果栅格。

于 2010-10-25T20:48:45.700 回答