tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
NEIN
ANTWORTEN
17
ZUGRIFFE
1528
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Eklaf Eklaf ist offline Mitglied Bronze
    Registriert seit
    Jun 2010
    Beiträge
    37
    Hi alle ich hätte da mal ne frage

    Ich muß ein Programm schreiben das Fit dateien lädt und sie darstellt.

    Fit Dateien sind rohe bild Dateien und ich hab keine ahnung wie ich die in ein Panel oder sonst was bekomme auseredem muß ich die Konstanten aus der Datei auslesen wenn ich einen Hex Editor nutze seh ich die Konstanten hab aber keine Ahnung wie ich die heraus bekomme wenn ich nen Button drücke.

    Bei den Anhängen ist ein Beispielbild zum Testen und verstehen.

    Bin für Vorschläge offen
    Angehängte Dateien Angehängte Dateien
     

  2. #2
    Avatar von mccae
    mccae mccae ist offline Senfdazugeber
    Registriert seit
    Dec 2007
    Ort
    Wien
    Beiträge
    226
    Huhu,

    Na ja, zuallerst würde ich schauen, ob es bereits eine Java Library gibt, die diese Dateien ausliest. (FIT Dateien kenne ich nicht, mir sind nur FITS Dateien geläufig).

    Wenn du das Rad doch neu erfinden musst, dann würde ich mir die Spezifikation zum Dateityp ansehen, lesen und verstehen.

    Danach kannst du einen eigenen Reader schreiben.

    Gruß,
    Martin
     

  3. #3
    Eklaf Eklaf ist offline Mitglied Bronze
    Registriert seit
    Jun 2010
    Beiträge
    37
    Hast recht sind FITS Dateien mein Fehler wie bringe ich die in ein Panel und wie bekomme ich die Daten aus dem Header?

    Bin für jede Hilfe dankbar

    Gruß, Bernd
     

  4. #4
    RoCMe RoCMe ist offline Mitglied Gold
    Registriert seit
    Dec 2007
    Beiträge
    193
    Hallo!

    Die magischen Worte "java" und "fits" bei google, führte hierhin:

    http://fits.gsfc.nasa.gov/fits_libraries.html

    *denk* NASA? *öhm* Na dann...

    Java
    nom.tam.fits classes

    A Java FITS library has been developed which provides efficient -- at least for Java -- I/O for FITS images and binary tables. The Java libraries support all basic FITS formats and gzip compressed files. Support for access to data subsets is included and the HIERARCH convention may be used.

    eap.fits

    Includes an applet and application for viewing and editing FITS files. Also includes a general purpose package for reading and writing FITS data. It can read PGP encrypted files if the optional PGP jar file is available.

    jfits

    The jfits library supports FITS images and ASCII and binary tables. In-line modification of keywords and data is supported.

    STIL

    A pure java general purpose table I/O library which can read and write FITS binary tables amongst other table formats. It is efficient and can provide fast sequential or random read access to FITS tables much larger than physical memory. There is no support for FITS images.
     

  5. #5
    Eklaf Eklaf ist offline Mitglied Bronze
    Registriert seit
    Jun 2010
    Beiträge
    37
    Okay ich hab das durchgelesen und paar sachen versucht bekomme es aber nicht zum laufen mache das zu kurz kann mir ev wer helfen? Will das bei klick eines Buttons die Fits datei in ein panel eingefügt wird und der Header ausgelesen wir
     

  6. #6
    Eklaf Eklaf ist offline Mitglied Bronze
    Registriert seit
    Jun 2010
    Beiträge
    37
    Also die Sommerferien sind so gut wie rum und ich bin noch immer nicht weiter kann mir denn keiner helfen ich hab mir das Programm nochmal angeschaut aber ich bekomme das nicht hin das ich bei klick eines Buttons das FITS Bild in ein Panel einfüge wenn mir jemand weiterhilft wäre ich echt sehr dankbar.
     

  7. #7
    RoCMe RoCMe ist offline Mitglied Gold
    Registriert seit
    Dec 2007
    Beiträge
    193
    Hi!

    Etwas mehr Eigeninitiative ist hier schon gefragt... Was genau hast du denn ausprobiert, und woran hakt es? Fehlermeldung? Ist- und Soll-Verhalten?

    Dir wird hier keiner einfach so ein Programm schreiben. Bei konkreten Problemen helfen wir aber gerne...
     

  8. #8
    Eklaf Eklaf ist offline Mitglied Bronze
    Registriert seit
    Jun 2010
    Beiträge
    37
    Okay stimmt hab zuwenig infos gegeben mein Fehler sry

    1. Meine Pogrammierkenntnisse umfassen das programmieren von schleifen und widgets mehr leider noch nicht. Leider kann ich API noch garnicht nutzen da wir das noch nicht durchgenommen haben aber ich lese gerade das Buch "Java von kopf bis Fuß" aber wenn wer noch vorschläge hat bin für alles dankbar.

    2. was ich versucht habe: Ich habe versucht das Programm zum laufen zu bringen.

    kommen wir zu meinen Problemen dabei ich markiere die farbig.

    Bei dem rot markierten wir ein Fits Objekt erzeugt wenn ich das richtig verstehe und ich bekomme das nicht hin das an der Stelle eine Fits Datei erzeugt bzw geladen wird.

    Bei dem gelb markierten wird der Header ausgelesen aber auch das bekomm ich ich nicht hin da ich kein bezug zu dem bild erzeugen kann und keine Ahnung habe wie ich die einzelnen Daten herausbekomme.

    /*
    * @(#)ReadFits.java $Revision: 1.5 $ $Date: 2007-01-04 09:32:23 $
    *
    * Copyright (C) 1999 European Southern Observatory
    * License: GNU General Public License version 2 or later
    */
    package org.eso.fits;

    import java.util.*;
    import java.io.*;

    /** TestFits class provides a static main method for testing the
    * FITS class library. It also shows a typical usage of the
    * classes.
    *
    * @version $Id: TestFits.java,v 1.5 2007-01-04 09:32:23 pgrosbol Exp $
    * @author P.Grosbol, ESO, <pgrosbol@eso.org>
    */
    public class TestFits{
    /** Static method for testing the FITS class library.
    *
    * @param argv array of arguments i.e. FITS files
    */
    public static void main(String[] argv) {
    if (argv.length < 1) {
    System.out.println("Error: must have at least one argument");
    System.exit(1);
    }

    System.out.println("-- Test FITS files --------");
    FitsFile file = null;
    for (int na=0; na<argv.length; na++) {
    try {
    file = new FitsFile(argv[na]);
    } catch (FitsException e) {
    System.out.println("Error: is not a FITS file >"
    + argv[na] + "<");
    continue;
    } catch (IOException e) {
    System.out.println("Error: cannot open file >"
    + argv[na] + "<");
    continue;
    }

    int noHDU = file.getNoHDUnits();
    System.out.println("FITS file has " + noHDU + " HDUnits");

    for (int i=0; i<noHDU; i++) {
    FitsHDUnit hdu = file.getHDUnit(i);
    FitsHeader hdr = hdu.getHeader();
    int noKw = hdr.getNoKeywords();
    int type = hdr.getType();
    int size = (int) hdr.getDataSize();
    System.out.println(" " + i + ": >" + hdr.getName()
    + "< of type >" + Fits.getType(type)
    + "< with " + noKw + " keywords"
    + " and " + size + " bytes of data");
    System.out.println(" Keywords:");

    ListIterator itr = hdr.getKeywords();
    while (itr.hasNext()) {
    FitsKeyword kw = (FitsKeyword) itr.next();
    System.out.print(" " + kw.getName());
    switch (kw.getType()) {
    case FitsKeyword.COMMENT:
    System.out.print("(C) " + kw.getComment());
    break;
    case FitsKeyword.STRING:
    System.out.print("(S)= '" + kw.getString() + "'");
    break;
    case FitsKeyword.BOOLEAN:
    System.out.print("(B)= " + kw.getBool());
    break;
    case FitsKeyword.INTEGER:
    System.out.print("(I)= " + kw.getInt());
    break;
    case FitsKeyword.REAL:
    System.out.print("(R)= " + kw.getReal());
    break;
    case FitsKeyword.DATE:
    System.out.print("(D)= " + kw.getString());
    break;
    default:
    }
    if (0<kw.getComment().length()
    && (kw.getType()!=FitsKeyword.COMMENT)) {
    System.out.print(" / " + kw.getComment());
    }
    System.out.println();
    }

    if (type == Fits.IMAGE) {
    System.out.println("\n Check data matrix "
    + "- compute mean and rms");
    FitsMatrix dm = (FitsMatrix) hdu.getData();
    int naxis[] = dm.getNaxis();
    double crval[] = dm.getCrval();
    double crpix[] = dm.getCrpix();
    double cdelt[] = dm.getCdelt();

    System.out.println(" Dimension of matrix: "
    + naxis.length);
    for (int n=0; n<naxis.length; n++)
    System.out.println(" Axis " + n + ": " + naxis[n]
    + ", " + crpix[n] + ", "
    + crval[n] + ", " + cdelt[n]);
    System.out.println("\n");

    int nv, off, npix;
    int nval = dm.getNoValues();
    if (0<nval) {
    int ncol = naxis[0];
    int nrow = nval/ncol;
    System.out.println(" Npixel,row,col: " + nval
    + ", " + nrow + ", " + ncol);
    float data[] = new float[ncol];
    double mean, rms, val;

    off = nv = npix = 0 ;
    mean = rms = 0.0;
    long time = System.currentTimeMillis();
    for (int nr=0; nr<nrow; nr++) {
    try {
    dm.getFloatValues(off, ncol, data);
    for (int n = 0; n<ncol; n++) {
    val = data[n];
    npix++;
    mean += val;
    rms += val*val;
    }
    } catch (FitsException e) {
    }

    off += ncol;
    }
    mean = mean/npix;
    rms = rms/npix - mean*mean;
    rms = ((0.0<rms) ? Math.sqrt(rms) : 0.0);
    float dtime =
    (float) (1000.0*(System.currentTimeMillis()-time)/
    ((double) nval));
    System.out.println(" Mean: " + (float)mean +
    ", rms: " + (float)rms +
    ", Time: " + dtime
    + " S/Mp, Pixels: " + npix);
    }
    } else if (type==Fits.BTABLE || type==Fits.ATABLE) {
    System.out.println("\n Check table data - list columns");
    FitsTable dm = (FitsTable) hdu.getData();
    int nrow = dm.getNoRows();
    int ncol = dm.getNoColumns();
    FitsColumn col[] = new FitsColumn[ncol];
    System.out.println(" Columns: " + ncol
    + ", Rows: " + nrow);
    for (int n=0; n<ncol; n++) {
    col[n] = dm.getColumn(n);
    System.out.print(" " + n + " >"
    + col[n].getLabel() + "<, ");
    System.out.print(col[n].getRepeat() + " ");
    System.out.print(col[n].getDataType() + ", >");
    System.out.print(col[n].getDisplay() + "<, >");
    System.out.println(col[n].getUnit() + "<");

    if (col[n].getDataType() == 'F'
    || col[n].getDataType() == 'E'
    || col[n].getDataType() == 'D') {
    int npix = 0;
    double mean, rms, val;
    mean = rms = 0.0;
    long time = System.currentTimeMillis();
    for (int nr=0; nr<nrow; nr++) {
    val = col[n].getReal(nr);
    if (Double.isNaN(val)) continue;
    npix++;
    mean += val;
    rms += val*val;
    }
    float dtime =
    (float) (1000.0*(System.currentTimeMillis()
    -time)/((double) nrow));
    mean = mean/npix;
    rms = rms/npix - mean*mean;
    rms = ((0.0<rms) ? Math.sqrt(rms) : 0.0);
    System.out.println(" no,mean,rms: " + npix
    + ", " + (float)mean + ", "
    + (float)rms + "; "
    + dtime + " S/Mp");
    } else if (col[n].getDataType() == 'I'
    || col[n].getDataType() == 'J'
    || col[n].getDataType() == 'B') {
    int npix = 0;
    double mean, rms, val;
    mean = rms = 0.0;
    long time = System.currentTimeMillis();
    for (int nr=0; nr<nrow; nr++) {
    val = col[n].getInt(nr);
    if (val == Long.MIN_VALUE) continue;
    npix++;
    mean += val;
    rms += val*val;
    }
    float dtime =
    (float) (1000.0*(System.currentTimeMillis()
    -time)/((double) nrow));
    mean = mean/npix;
    rms = rms/npix - mean*mean;
    rms = ((0.0<rms) ? Math.sqrt(rms) : 0.0);
    System.out.println(" no,mean,rms: " + npix
    + ", " + (float)mean + ", "
    + (float)rms + "; "
    + dtime + " S/Mp");
    }
    }
    }
    }
    System.out.println("-- Test finished -----------------");
    }

    System.exit(0);
    }
    }
     

  9. #9
    Avatar von Franz Degenhardt
    Franz Degenhardt Franz Degenhardt ist offline Mitglied Brokat
    Registriert seit
    Mar 2004
    Ort
    Köln
    Beiträge
    378
    Mit API arbeiten tut man eigentlich die ganze Zeit, mit einer fremden API zu arbeiten ist da nicht viel anders.

    Code :
    1
    2
    3
    4
    
    FitsFile file = null;
    for (int na=0; na<argv.length; na++) {
    try {
    file = new FitsFile(argv[na]);
    In den markierten Zeilen geht es um folgendes:
    Erzeugen eines FitsFile-Objektes mit dem Konstruktor, der einen String - vermutlich der Dateiname der der Fitsdatei - entgegennimmt.
    Dieses Objekt kann dann schon einiges in Richtung Fits. Was genau verrät die API.

    Ich würde mir zum Anfangen ein paar Testmethoden bauen, die ohne gui einfach die Fitsdatei parsen und mit den Fits Objekten rumspielen.
    Und keine Angst vor fremden APIs haben, alleine mithilfe des Contentassistent (strg+Leertaste in den meisten IDEs) und sprechenden Methodennamen kann man meist in fremden APIs arbeiten ohne gross zu lesen.
     
    Denken gefärdet die Gewohnheit

  10. #10
    Eklaf Eklaf ist offline Mitglied Bronze
    Registriert seit
    Jun 2010
    Beiträge
    37
    habe das jetzt mal versucht aber ich kapiers nicht

    zuerst der button klick da erzeuge ich ein objekt und eine referenz auf ein Unterprogramm wo das bild dann gelade werden soll und zurück gegeben wird und dann in das label eingefügt wird er mosert aber an den roten stellen was auch verständlich ist da ich keine ahnung habe wie ich das deklarieren soll.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    
    public void actionPerformed(ActionEvent e)
        {
            if (e.getSource()== menueDateiBildLaden)
            {
                Unterklassen.Fits fits =new Unterklassen.Fits();
                [COLOR="red"]FitsBild[/COLOR]=fits.laden();
                lblBild.add([COLOR="red"]FitsBild[/COLOR]);
            }}

    und hier ist das Unterprogramm:
    auch hier mosert er an den rotmarkierten stellen warum er bei dem Dateinamen mosert verstehe ich nicht hab es auch mit dem gesamten pfad versucht aber auch das mag er nicht.
    beim return mosert er vermutlich da ich die class als void gemacht habe aber hab keine ahnung was ich der sonst für nen wert geben soll?

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    package Unterklassen;
     
    public class Fits 
    {
        public void laden()
        {
            Fits f = new Fits([COLOR="red"]m45_0488.fit[/COLOR]);
            [COLOR="red"]return f[/COLOR];
        }
    }
    Geändert von Eklaf (14.09.10 um 13:43 Uhr)
     

  11. #11
    Avatar von Franz Degenhardt
    Franz Degenhardt Franz Degenhardt ist offline Mitglied Brokat
    Registriert seit
    Mar 2004
    Ort
    Köln
    Beiträge
    378
    Habe gerade mal in die fits libs reingeschaut, jfits ist mir vom Namen her am sympatischsten.
    Die Javadoc dazu gibt es hier: http://www.hq.eso.org/~pgrosbol/fits.../FitsFile.html.
    Wie vermutet kann man den Konstruktor mit einem String, der einen Pfad + Dateinamen in Javaschreibweise enthält, verwenden.

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    public class Fits 
    {
        public FitsFile laden()
        {
            String fitsdatei = "c:/folder/m45_0488.fit";
            FitsFile f = new FitsFile(fitsdatei);
            return f;
        }
    }

    Um obigen Code zu testen, würde ich mir eine Testklasse anlegen, die ohne gui oder sonstiges genau die Methode aufruft und die Funktionalität überprüft, z.B. ob das zurückgegebene FitsFile Objekt in Ordnung ist.
    Ist dies mit der Testklasse sichergestellt, kann man einen Schritt weiter gehen. FitsFile kann noch nicht besonders viel. Ohne zu wissen was fits ist, scheint die Methode getHDUnit am funktionalsten zu sein (der auskommentierte code von dir geht auch in die Richtung HDUnit dann über die Header).
    Irgendwann soll etwas mit einem Bild passieren. Den Weg durch die API von FitsFile bis zu einem Bildobjekt würde ich komplett in Testmethoden nachvollziehen, bei denen man sich in kurzen trial and error zyklen Stück für Stück durch die API durchkämpft.

    Hast du ein ordentliches IDE für Java?

    edit: compiler fehler ausgemertzt, habe gerade kein ide zur hand.
    Geändert von Franz Degenhardt (14.09.10 um 15:53 Uhr)
     
    Denken gefärdet die Gewohnheit

  12. #12
    Eklaf Eklaf ist offline Mitglied Bronze
    Registriert seit
    Jun 2010
    Beiträge
    37
    Ich programmiere mit eclipse und einer Jigloo erweiterung die ich aber nicht viel nutze da ich sie nicht so gut finde oder was meinst du mit IDE?

    hab das Programm mal in einer extra classe versucht weiß aber nicht so recht was ich da für ein Paket importieren soll drum geht es noch nicht
     

  13. #13
    Avatar von Franz Degenhardt
    Franz Degenhardt Franz Degenhardt ist offline Mitglied Brokat
    Registriert seit
    Mar 2004
    Ort
    Köln
    Beiträge
    378
    Eclipse ist ein gutes IDE (Integrated development environment).
    Bei der Arbeit mit externen Bibliotheken wie jfits läd man sich die entsprechenden Bibliotheken herunter und legt sie lokal ab, z.B. in einem Ordner 'lib' innerhalb deines Eclipseprojektes oder irgendwo auf der Platte. Dann fügt man die Bibliothek dem Projekt als Java-Bibliothek hinzu, rechtsklick auf Projekt -> buildpath (ich betreibe alle Programme die mit entwickeln zu tun haben auf englisch, da die deutsche Übersetztung meist irreführend ist).

    Anschliessend fügt man benötigte Importstatements entweder per ctrl-shift-o hinzu oder mit ctrl-shift-m während man eins der neuen Objekte selektiert hat.

    Alternativ rtfm der neuen Bibliothek. Oder starten mit einem einfachen fertigen Beispiel dort stehen die Imports schon drinn.
     
    Denken gefärdet die Gewohnheit

  14. #14
    Avatar von Franz Degenhardt
    Franz Degenhardt Franz Degenhardt ist offline Mitglied Brokat
    Registriert seit
    Mar 2004
    Ort
    Köln
    Beiträge
    378
    jfits lib-jar: http://www.hq.eso.org/~pgrosbol/fits...jfits-0.94.jar
    Testdatei: http://www.hq.eso.org/~pgrosbol/fits_java/TestFits.java
    How add jar in eclipse: http://www.wikihow.com/Add-JARs-to-P...pse-%28Java%29

    Ausgabe für deine fits-Datei:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    
    -- Test FITS files --------
    FITS file has 1 HDUnits
      0: >NONE< of type >Image< with 22 keywords and 30308580 bytes of data
       Keywords:
         SIMPLE(B)= true
         BITPIX(I)= 16
         NAXIS(I)= 2
         NAXIS1(I)= 4770
         NAXIS2(I)= 3177
         MIPS-HI(I)= 15763
         MIPS-LO(I)= 0
         MIPS-X1(I)= 0
         MIPS-Y1(I)= 0
         MIPS-X2(I)= 0
         MIPS-Y2(I)= 0
         MIPS-BIX(I)= 1
         MIPS-BIY(I)= 1
         MIPS-CCD(I)= 0
         MIPS-FL(I)= 0
         MIPS-SX(I)= 4770
         MIPS-SY(I)= 3177
         MIPS-NOR(R)= 1.0
         MIPS-CST(R)= 0.0
         DATE-OBS(D)= 2010-01-03T00:00:00
         UT-START(S)= '22:53:36'
         EXPTIME(R)= 20.0
     
      Check data matrix - compute mean and rms
      Dimension of matrix: 2
       Axis 0: 4770,  0.0,  0.0,  1.0
       Axis 1: 3177,  0.0,  0.0,  1.0
     
     
     Npixel,row,col: 15154290, 3177, 4770
      Mean: 1133.8451, rms: 190.09262, Time: 0.11422508 S/Mp, Pixels: 15154290
    -- Test finished -----------------
    Eklaf bedankt sich. 
    Denken gefärdet die Gewohnheit

  15. #15
    Eklaf Eklaf ist offline Mitglied Bronze
    Registriert seit
    Jun 2010
    Beiträge
    37
    Erstmal möchte ich danke sagen die beschreibungen haben mir weitergeholfen ich hab die Bibliothek implementiert und seit dem zeigt es mir in der TestFits auch keine Fehler mehr an allerdings habe ich keine ahnung wie ich das TestFits auf die Datei verweise.

    Bekomme die Fehlermeldung
    Code :
    1
    
    Error: must have at least one argument
     

Ähnliche Themen

  1. Wie binde ich das Model ans biped?
    Von XcLi0 im Forum 3D Studio Max
    Antworten: 1
    Letzter Beitrag: 06.03.10, 01:12
  2. wie binde ich swf in den header ein?
    Von gelaniee im Forum PHP
    Antworten: 3
    Letzter Beitrag: 19.08.07, 21:53
  3. Antworten: 7
    Letzter Beitrag: 01.05.05, 22:51
  4. Antworten: 4
    Letzter Beitrag: 06.12.04, 09:54
  5. wie binde ich Musik auf der Hompage ein ?
    Von wildcard im Forum HTML & XHTML
    Antworten: 2
    Letzter Beitrag: 24.03.04, 22:12

Stichworte