我正在尝试使用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的例子。
答案 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()
看起来你正在调用一个静态方法,在你发布的代码中从未引用的类上没有参数。如何为您的位图生成数据???即使在伪代码中,您也需要获取变换的结果并构建结果栅格。