Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Noobfragen zu Grafiken und Pixeln (https://www.delphipraxis.net/105240-noobfragen-zu-grafiken-und-pixeln.html)

dasbinich 18. Dez 2007 14:54


Noobfragen zu Grafiken und Pixeln
 
Liste der Anhänge anzeigen (Anzahl: 1)
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:
:arrow: ich speichere erstmal jeden Pixel in ein Array(mag sein, dass es elegantere Möglichkeiten gibt, aber für mich ist es so greifbarer)
:arrow: dann fasse ich je 2 bis 3 pixelzeilen(je nach auflösung) zusammen(ich addiere die Helligkeiten) um kleine Fehler zu "verwischen"
:arrow: Ich suche das hellste Zeilenpaar/tripel um das eigentliche Beugungsbild zu finden
:arrow: 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)
:arrow: 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.

Nuclear-Ping 18. Dez 2007 20:08

Re: Noobfragen zu Grafiken und Pixeln
 
1)
Du musst Objekte instanzieren, bevor du sie benutzen kannst.

Falsch:
Delphi-Quellcode:
Image1: Tpicture;
begin
Image1.LoadFromFile('beugung.bmp');
...
Richtig:
Delphi-Quellcode:
Image1: TBitmap;
begin
  Image1 := TBitmap.Create;
  try
    Image1.LoadFromFile('Pfad?/beugung.bmp');
    for y := 1 to 600 do
      ...
  finally
    FreeAndNil (Image1);
  end;
  ...
2)
Benutz mal die Foren-Suche, da müßte es schon einiges geben

3)
Hä? ^^
Delphi-Quellcode:
var
  min, max: Integer;

min := MaxInt;
max := 0;
for a := 0 to X do
  begin
    if (Array[a] > max) then
      max := Array[a];
    if (Array[a] < min) then
      min := Array[a];
  end;
Sowas?

Rociel 18. Dez 2007 20:17

Re: Noobfragen zu Grafiken und Pixeln
 
Wenn du dann alles Programmiertechnische zum Auswerten der Abstände fertig hast, dann kannst du ja dann noch eine Lineare Regression zu schreiben, mit graphischer Darstellung und Ausgabe der Geraden, Fehler und des Korrelationskoeffizienten. Ich glaube dann würden dir viele Physik-Erstsemestler, die nicht mit Orign umgehen können, dankbar sein ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:12 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz