Vorerst eine Bitte, bewerft mich nicht mit zusammenhangslosen Syntaxbruchstücken wie ich sie schon zig Mal in der Hilfedatei und anderen Threads gesehen habe. Ich hab noch nicht so viel Erfahrung damit, dass ich die auf den ersten(und auch nicht auf den zweiten) Blick richtig verwenden kann.
Mein Ziel ist ein Programm zu schreiben, dass ein Interferenzmuster(z.B: im Anhang) automatisch auswertet. Dazu mache ich folgendes:
ich speichere erstmal jeden Pixel in ein Array(mag sein, dass es elegantere Möglichkeiten gibt, aber für mich ist es so greifbarer)
dann fasse ich je 2 bis 3 pixelzeilen(je nach auflösung) zusammen(ich addiere die Helligkeiten) um kleine Fehler zu "verwischen"
Ich suche das hellste Zeilenpaar/tripel um das eigentliche Beugungsbild zu finden
ich rechne mit dem vorherigem ergebnis und gehe das Array von links nach rechts durch und suche die Maxima/Minima indem ich schaue ob die zahlen kleiner werden(nach einem hochpunkt) oder größer(nach einem tiefpunkt)
mit etwas trigonometrie kann ich mir das nötige berechnen lassen.(vorerst gebe ich das maßstab manuell ein, aber wenn der Rest funktioniert lege ich noch nen Schwarzen 1-cm-Streifen vertikal daneben und dann sollte auch die automatische umrechnung funktionieren)
Und jetzt die Fragen:
1) wie lade ich eigentlich ein Bild, sodass ich es verwenden kann, muss ich dazu was in der variablendeklaration hinschreiben oder ein Image/Paintbox im Formular einfügen? (verzeichnis: C/Bilder/beispiel.bmp)
2) wie kann ich die Farbe/Helligkeit eines pixels abfragen und was für einen wert bekomme ich raus? Kann ich für die Heligkeit einfach den Mittelwert der
RGB-werte bilden? (Weiss hat ja die maximalen R,G und B-zahlen, reicht es dann, wenn ich beim fotografieren den schirm in den schatten stelle, oder braucht man völlige dunkelheit, weil Grau ja nur etwas dunkleres Weiss ist)
3) gibt es einen einfachen Syntax-Befehl um einen array durch eine funktion anzupassen und deren Hoch/Tiefpunkte zu bestimmen, oder wären es eigenständige komplizierte Programme?
Hier mal der Quelltext, einige Variablen hab ich provisorisch deklariert, und sonst auf das wesentliche gekürzt
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var x,y,i,j,k: integer;
R,G,B: double;
ar: array [1..800,1..600] of double;
ysum: array [1..600] of double;
zeile: array [1..598] of double;
Image1: Tpicture;
begin
Image1.LoadFromFile('beugung.bmp');
begin
for y:=1 to 600 do
begin
for x:=1 to 800 do
begin
ar[x,y]:=getRvalue(canvas.pixels[x,y]);
end;
end;
end;
//hier bilde ich die summe der pixel einer zeile
begin
ysum[i]:=0;
for i:=1 to 600 do
begin
for j:=1 to 800 do
begin
ysum[i]:=ysum[i]+ar[i,j];
end;
end;
end;
//und hier werden je 3 zeilen zu einer zusammengefasst
begin
for k:=1 to 598 do
zeile[k]:=ysum[k]+ ysum[k+1]+ ysum[k+2]
end; end;
end.
Ich weiss, es ist noch nicht ganz fertig, aber bisher funktioniert nicht mal das, Delphi schafft es zwar das erfolgreich zu compilieren, aber wenn ich es über delphi starte bekomme ich eine "Stack-Overflow" Meldung und wenn ich die .exe starte wird das Fenster einfach geschlossen und nichts passiert.
Optimierungsvorschläge zum Prinzip der Auswertung sind erwünscht und werden nach möglichkeit umgesetzt.