2010-10-25 19 views
3

J'essaye de prendre un BufferedImage, d'appliquer une transformée de Fourier (en utilisant jtransforms) et d'écrire les données dans le BufferedImage. Mais je suis coincé en train de créer un nouveau raster pour rétablir les résultats, ai-je oublié quelque chose ici?Comment créer un raster à partir d'un tableau flottant de pixels en Java?

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); 

Mais je suis perplexe en essayant de terminer cette ligne, que dois-je donner à la fonction createRaster? Les javadocs pour createRaster me faire peu de sens:

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

Je commence à me demander si un réseau de flotteurs est même nécessaire, mais il n'y a pas beaucoup d'exemples de jtransforms là-bas.

Répondre

4

Ne pas créer un nouveau Raster. Utilisez WritableRaster.setPixels(int,int,int,int,float[]) pour réécrire le tableau sur l'image.

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);  

Notez également que si vous avez l'intention d'afficher cette image, vous devez vraiment le copier sur un screen-compatible type; ImageIO les renvoie rarement.

+2

Fantastique, je savais qu'il me manquait quelque chose d'évident. Rappelez-moi de vous accorder la prime si j'oublie (je dois attendre 24h) –

0

Je fais des recherches Google pour FloatDCT_2D pour voir dans quel paquet/bibliothèque il se trouve, et il semble qu'il y ait plusieurs références à diverses sources, telles que "edu.emory.mathcs.jtransforms.dct.FloatDCT_2D". Sans savoir quelle bibliothèque personnalisée vous utilisez, il est vraiment difficile de vous donner des conseils sur la façon d'effectuer la transformation.

Je suppose en général, que vous devriez lire les données d'entrée du raster d'origine, effectuer la transformation sur les données d'origine, puis écrire la sortie dans un nouveau raster. Cependant, votre dernière déclaration tout semble étrange ... Raster.createRaster() ressemble à une méthode statique sans paramètre sur une classe que vous n'avez jamais référencée dans le code que vous avez publié. Comment cela génère-t-il des données pour votre bitmap ??? Même en pseudo-code, vous devrez prendre les résultats de votre transformation et construire le raster résultant.

+1

Oui, c'est ce que j'essaie de faire. Raster.createRaster() prend trois arguments, mais je suis complètement perdu quant à ce qu'il faut lui donner, les javadocs pour createRaster ne sont pas utiles du tout. –