Frage

Ich versuche, eine BufferedImage zu nehmen, gilt eine Fourier-Transformation (mit jtransforms) und schreiben Sie an die BufferedImage die Daten zurück. Aber ich bin fest ein neues Raster zu schaffen, die Ergebnisse zu zurück, bin ich etwas fehlt hier?

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

Aber ich diese Linie zu beenden stapfte versuchen, was soll ich geben die createRaster Funktion? Die javadocs für createRaster macht wenig Sinn für mich:

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

Ich fange an zu fragen, ob ein Schwimmer Array sogar notwendig ist, aber es gibt nicht viele Beispiele für jtransforms da draußen.

War es hilfreich?

Lösung

Starten Sie eine neue Raster nicht erstellen. Verwenden Sie WritableRaster.setPixels(int,int,int,int,float[]) auf das Bild, um das Array zurück zu schreiben.

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

Beachten Sie auch, dass, wenn Sie planen, um dieses Bild anzuzeigen, sollten Sie kopieren Sie es in ein wirklich Bildschirm-kompatiblen Typ ; ImageIO selten gibt jene.

Andere Tipps

Ich mache Google sucht nach FloatDCT_2D zu sehen, was Paket / Bibliothek ist es in, und es sieht aus wie es mehrere Verweise auf verschiedene Quellen, wie zum Beispiel „edu.emory.mathcs.jtransforms.dct.FloatDCT_2D“. Ohne zu wissen, was benutzerdefinierte Bibliothek Sie verwenden, es ist wirklich schwer, Ihnen irgendwelche Ratschläge zu geben, wie die Transformation durchzuführen.

Meine Vermutung im Allgemeinen ist, dass Sie die Eingabedaten aus dem ursprünglichen Raster lesen sollten, die auf den Originaldaten umwandeln ausführen, dann schreiben Sie die Ausgabe in eine neue Raster.

Allerdings Ihre letzte Aussage alles auf seine eigene Aussehen seltsam ... Raster.createRaster() sieht aus wie Sie den Aufruf einer statischen Methode ohne Parameter auf einer Klasse, die Sie nie in den Code verwiesen haben Sie geschrieben haben. Wie ist das Erzeugungsdaten für die Bitmap ??? Selbst in Pseudo-Code, müßten Sie die Ergebnisse Ihrer nehmen transformieren und das resultierende Raster zu bauen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top