AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Pixelvalues in einem Kreis lesen
Thema durchsuchen
Ansicht
Themen-Optionen

Pixelvalues in einem Kreis lesen

Ein Thema von brandtson · begonnen am 12. Jan 2004 · letzter Beitrag vom 13. Jan 2004
Antwort Antwort
brandtson

Registriert seit: 27. Nov 2003
Ort: HH
23 Beiträge
 
Delphi 6 Professional
 
#1

Pixelvalues in einem Kreis lesen

  Alt 12. Jan 2004, 16:59
Hallo alle Miteinander!

Ich versuche gerade mir die Pixelwerte in einem Graustufenbild anzeigen zu lassen und zwar nur diejenigen die von einem Kreis umschlossen sind. An die Werte zu bekommen ist ja mittels Scanline kein Problem, doch wie mache ich Delphi jetzt klar, dass ich nur die Werte aus dem Kreis will? Ich habe da mal ein bischen in der Mathematik geschnüffelt und folgendes gefunden:

Delphi-Quellcode:
procedure tkreis.kreisroi;

var help,help2,i,j,yobererhalbkreis,yuntererhalbkreis: integer;

begin
  setlength(xywerte,breite,hoehe);
  for i:=0 to breite-1 do
  for j:=0 to hoehe-1 do
    xywerte[i,j]:=true;
  for i:=0 to breite-1 do
    begin
      help:= sqr(rd)-sqr(i-x);
      if help>0 then
        begin
          help2:=round(sqrt(help));
          yobererhalbkreis:=y+help2;
          yuntererhalbkreis:=y-help2;
          for j:=0 to hoehe-1 do
            begin
              if j<=yobererhalbkreis then
              if j>=yobererhalbkreis then
                xywerte[i,j]:=false;
            end;
        end;
    end;
    for i:=0 to breite-1 do
    for j:=0 to hoehe-1 do
     if xywerte[i,j]=true then
       begin
         zahler:= zahler+pixelwerte[i,j];
       end;
end;
Das stammt alles von der Formel y=y0 +- sqrt(r²-(x-x0)²)! XYWerte ist ein Array vom Typ wordbool und der Array pixelwerte vom Typ integer gefüllt mit den Werten der einzelnen Pixel.
Ich bekomme als Ergebniss aber immer nur Null. Freue mich über jeden Tip oder Alternativen, die mich davon abhalten meinen Computer zu verhackstücken.

gruß Brandtson
  Mit Zitat antworten Zitat
Benutzerbild von Seniman
Seniman

Registriert seit: 15. Sep 2003
Ort: Münster
98 Beiträge
 
#2

Re: Pixelvalues in einem Kreis lesen

  Alt 13. Jan 2004, 00:02
Hallo brandtson,

wenn ich das Problem angehen würde, würde ich es mit dem Satz von Pythagoras machen.
Angenommen du willst überprüfen, ob der Punkt (x,y) im Kreis um den Punkt (mx,my) mit Radius r liegt, dann gilt:
Code:
sqrt(sqr(mx-x)+sqr(my-y))<r
Darüberhinaus kann man beide seiten Quadrieren, denn beide sollten positiv sein, dann kann man folgendes benutzen:

Code:
(sqr(mx-x)+sqr(my-y))<sqr(r)
Das zweite ist wahrscheinlich ein kleinerer Rechenaufwand.
So kannst du jeden Pixel überprüfen, ob er im gegebenen Kreis liegt.

Noch ein Hinweis zu deinem Code:
Statt
 if xywerte[i,j]=true then würde auch folgendes reichen:
 if xywerte[i,j] then -> Siehe Datentyp Boolean

Grüße
Seniman
  Mit Zitat antworten Zitat
brandtson

Registriert seit: 27. Nov 2003
Ort: HH
23 Beiträge
 
Delphi 6 Professional
 
#3

Re: Pixelvalues in einem Kreis lesen

  Alt 13. Jan 2004, 11:35
Hi Seniman,

danke für deinen guten Ratschlag! Jetzt klappts, die Source ist auch um einiges kürzer geworden.

Delphi-Quellcode:
procedure tkreis.kreisroi2;

var mx,my: integer;

begin
  pixelcount:= 0;
  setlength(xywerte,breite,hoehe);
    for mx:=0 to breite-1 do
      for my:=0 to hoehe-1 do
        begin
          if (sqr(mx-x)+sqr(my-y))<sqr(rd) then
            begin
              xywerte[mx,my]:=true;
              zahler:=zahler+pixelwerte[mx,my];
              pixelcount:= pixelcount+1;
            end;
        end;
end;
gruß brandtson
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:31 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