如何从Java中的像素浮点数组创建Raster?

时间:2010-10-25 20:12:00

标签: java bufferedimage raster

我正在尝试使用BufferedImage,应用傅里叶变换(使用jtransforms),并将数据写回BufferedImage。但是我很难创建一个新的Raster来重新设置结果,我在这里遗漏了什么吗?

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的javadoc对我来说没什么意义:

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

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

2 个答案:

答案 0 :(得分: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);    

另请注意,如果您计划显示此图片,则应将其复制到screen-compatible type; ImageIO很少返回那些。

答案 1 :(得分:0)

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

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

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