Как создать растр из массива с плавающей точкой в ​​Java? - PullRequest
3 голосов
/ 26 октября 2010

Я пытаюсь получить 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`));

Я начинаю задумываться, нужен ли вообще массив float, но примеров jtransforms не так много.

Ответы [ 2 ]

4 голосов
/ 28 октября 2010

Не создавать новый 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 редко возвращает их.

0 голосов
/ 26 октября 2010

Я выполняю поиск Google для FloatDCT_2D, чтобы увидеть, в каком пакете / библиотеке он находится, и похоже, что есть несколько ссылок на различные источники, такие как «edu.emory.mathcs.jtransforms.dct.FloatDCT_2D». Не зная, какую пользовательскую библиотеку вы используете, очень сложно дать вам какой-либо совет о том, как выполнить преобразование.

В общем, я предполагаю, что вы должны прочитать входные данные из исходного растра, выполнить преобразование исходных данных, а затем записать вывод в новый растр.

Однако ваше последнее утверждение само по себе выглядит странно ... Raster.createRaster() похоже, что вы вызываете статический метод без параметров в классе, на который вы никогда не ссылались в опубликованном вами коде. Как это генерирует данные для вашего растрового изображения ??? Даже в псевдокоде вам нужно будет взять результаты вашего преобразования и построить результирующий растр.

...