Wie binde ich Fit Datei ein****

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_java/docs/org/eso/fits/FitsFile.html.
Wie vermutet kann man den Konstruktor mit einem String, der einen Pfad + Dateinamen in Javaschreibweise enthält, verwenden.

Java:
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.
 
Zuletzt bearbeitet:
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
 
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.
 
jfits lib-jar: http://www.hq.eso.org/~pgrosbol/fits_java/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-Project-Build-Paths-in-Eclipse-(Java)

Ausgabe für deine fits-Datei:
Code:
-- 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 -----------------
 
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:
Error: must have at least one argument
 
Freut mich, dass du weitergekommen bist.
In Eclipse kann man den Run-Dialog noch konfigurieren um dort z.b. Kommandozeilenargumente zu übergeben. Screenshots erklären das am besten finde ich: http://www.cs.colostate.edu/helpdocs/eclipseCommLineArgs.html

Die Fehlermeldung die du siehst, wird in der Mainmethode erzeugt, für den Fall, dass keine Argumente übergeben werden. Das Codestück kannst du ja mal näher begutachten.

TestFits sieht vor, den Pfad zu der Fitdatei als Parameter zu übergeben. In der Mainmethode wird der Wert dann entgegengenommen und verwendet. D.h. dort kannst du natürlich dann eingreifen und den Wert anderswo herholen, hart kodieren, configdatei oä.

edit:
im rundialog zu konfigurierender Wert(in Windows Slash statt Backslash verwenden):

c:/meinOrdner/meineFitsdatei.txt
 
Zuletzt bearbeitet:
Hallo nochmal ich muß dieses Thema leider nochmal aufgreifen.

Ich bekomme das Bild nicht angezeigt in meinem Programm

Code:
package Oberfaechen;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.*;

import java.io.File;

import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;

import org.eso.fits.FitsTestHDU;

import Hilfsklassen.*;


public class OberflaecheMain extends JFrame implements ActionListener,MouseListener
{
	int iXPos=0, iYPos=0;
	
	
	private JFrame mainFrame;
	private JPanel pnlMain,pnlPos,pnlBild;
	private JMenuBar menueLeiste;
	private JMenu menueDatei,menueAusgleichsrechnung,menueHilfe;
	private JMenuItem menueHilfeDokumentation,menueHilfeInfo,menueARDrucken,menueARLaden,menueARSpeichern,menueARStarten,
			menueProgBeenden,menueBildLaden;
	private JLabel lblXPos,lblYPos,lblLeer;
	
	DateiLaden dateiLaden=new DateiLaden();
	FitsTestHDU fitsTest =new  FitsTestHDU();
	File fileDateiPfad;
//	ImageDisplay display;
	

public void los()
{
	try 
	{
	mainFrame=new JFrame("Astronomie Software");
	mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	
	menueLeiste=new JMenuBar();
	mainFrame.getContentPane().add(BorderLayout.NORTH,menueLeiste);
	
		menueDatei=new JMenu("Datei");
		menueLeiste.add(menueDatei);
		
			menueBildLaden=new JMenuItem("Bild laden");
			menueDatei.add(menueBildLaden);
			menueBildLaden.addActionListener(this);
			
			menueProgBeenden=new JMenuItem("Programm beenden");
			menueDatei.add(menueProgBeenden);
			menueProgBeenden.addActionListener(this);
		
		menueAusgleichsrechnung=new JMenu("Ausgleichsrechnung");
		menueLeiste.add(menueAusgleichsrechnung);
		
			menueARStarten=new JMenuItem("Ausgleichsrechnung starten");
			menueAusgleichsrechnung.add(menueARStarten);
			menueARStarten.addActionListener(this);
			
			menueARSpeichern=new JMenuItem("Ausgleichsrechnung speichern");
			menueAusgleichsrechnung.add(menueARSpeichern);
			menueARSpeichern.addActionListener(this);
			
			menueARLaden=new JMenuItem("Ausgleichsrechnung laden");
			menueAusgleichsrechnung.add(menueARLaden);
			menueARLaden.addActionListener(this);
			
			menueARDrucken=new JMenuItem("Ausgleichsrechnung drucken");
			menueAusgleichsrechnung.add(menueARDrucken);
			menueARDrucken.addActionListener(this);
			
		menueHilfe=new JMenu("Hilfe");
		menueLeiste.add(menueHilfe);
			
			menueHilfeInfo=new JMenuItem("Info");
			menueHilfe.add(menueHilfeInfo);
			menueHilfeInfo.addActionListener(this);
			
			menueHilfeDokumentation=new JMenuItem("Dokumentation");
			menueHilfe.add(menueHilfeDokumentation);
			menueHilfeDokumentation.addActionListener(this);
			
	pnlMain=new JPanel();
	pnlMain.setLayout(new BoxLayout(pnlMain, BoxLayout.Y_AXIS));
	
	pnlPos=new JPanel();
	pnlPos.setLayout(new BoxLayout(pnlPos, BoxLayout.X_AXIS));
	
		lblXPos= new JLabel("X Position: "+iXPos);
		lblXPos.setSize(200, 20);
		
		lblLeer=new JLabel("          ");
		
		lblYPos=new JLabel("Y Position: "+iYPos);
		lblYPos.setSize(200, 20);
		
		pnlPos.add(lblXPos);
		pnlPos.add(lblLeer);
		pnlPos.add(lblYPos);
		
	//display = new ImageDisplay();
	pnlBild=new JPanel();
	pnlBild.setSize(600, 400);
	pnlBild.setBackground(Color.blue);
	//pnlBild.addMouseListener(this);	
	
	pnlMain.add(pnlPos);
	pnlMain.add(pnlBild);
	
	mainFrame.getContentPane().add(BorderLayout.CENTER,pnlMain);
	
	mainFrame.setSize(1024, 768);
	mainFrame.setVisible(true);
	}
	catch(Exception e)
	{
		System.out.println("Fehler: "+e.getMessage());
	}
}

	public void actionPerformed(ActionEvent e)
	{
		if (e.getSource()== menueBildLaden)
		{
			dateiLaden.setDateipfad();
		}
		if (e.getSource()== menueARStarten)
		{			
			OberflaecheAuswertung OberflaecheAusw = new OberflaecheAuswertung();	
			OberflaecheAusw.los();
			fitsTest.los(dateiLaden.getDateipfad(),OberflaecheAusw,dateiLaden);
		}
		if (e.getSource()== menueHilfeInfo)
		{
			OberflaecheInfo OberflaecheInfo = new OberflaecheInfo();
			OberflaecheInfo.los();
		}
		if (e.getSource()== menueProgBeenden)
		{
			System.exit(0);
		}
	}
	public void mouseClicked(MouseEvent mk) 
	{	
		if (mk.getSource()== pnlBild)
		{
			
		}
		}
	public void mouseEntered(MouseEvent mk) 
		{	
		}
	public void mouseExited(MouseEvent mk) 
		{	
		}
	public void mousePressed(MouseEvent mk) 
		{
			
		}
	public void mouseReleased(MouseEvent e) 
		{	
		}
	}

Hier möchte ich das Bild einfügen:

Code:
//display = new ImageDisplay();
	pnlBild=new JPanel();
	pnlBild.setSize(600, 400);
	pnlBild.setBackground(Color.blue);
	//pnlBild.addMouseListener(this);

Und hier möchte ich gerne die Position meines Mauszeigers auf dem Bild wiedergeben

Code:
pnlPos=new JPanel();
	pnlPos.setLayout(new BoxLayout(pnlPos, BoxLayout.X_AXIS));
	
		lblXPos= new JLabel("X Position: "+iXPos);
		lblXPos.setSize(200, 20);
		
		lblLeer=new JLabel("          ");
		
		lblYPos=new JLabel("Y Position: "+iYPos);
		lblYPos.setSize(200, 20);
		
		pnlPos.add(lblXPos);
		pnlPos.add(lblLeer);
		pnlPos.add(lblYPos);

Ich wäre für Hilfe echt dankbar :( ;)
 
Kann mir keiner weiterhelfen? Ich komme echt nicht weiter. Sonst muß ich mir jetzt echt professionelle Hilfe holen :(
 
Zurück