Einzelnen Beitrag anzeigen

NeoXan
(Gast)

n/a Beiträge
 
#7

Re: Art Motion Tracking mit Scanlines

  Alt 19. Dez 2005, 16:36
Woot, kleiner Erfolg, also das mit den Pixel funktioniert jetzt

Delphi-Quellcode:
function TfrmMain.ScanPicture(var bmpIN, bmpOUT: TBitmap): boolean;
var
  y, x: integer;
  LineIN, LineOUT: PRGBQuad;
  Red, Green, Blue : Array [0..1] of Byte;
begin

  Red[0] := $00;
  Green[0] := $00;
  Blue[0] := $F0;

  Red[1] := $00;
  Green[1] := $00;
  Blue[1] := $FF;

  for y := 0 to bmpIN.Height - 1 do
  begin
    LineIN := bmpIN.ScanLine[y];
    LineOUT := bmpOUT.ScanLine[y];
    for x := 0 to bmpIN.Width - 1 do
    begin

      if(
      (LineIN^.rgbRed = $00) AND
      (LineIN^.rgbGreen = $00) AND
      (LineIN^.rgbBlue in [Blue[0]..Blue[1]])
      ) then
      begin
        if(DisplayMethod = dmPoints) then
        begin
          LineOUT^.rgbRed := $00; // = RGB (255, 0, 0) = clRed
          LineOUT^.rgbGreen := $00;
          LineOUT^.rgbBlue := $FF;
        end;
       if(DisplayMethod = dmLines) then
        begin
          if( FirstRun ) then
          begin
  // bmpOUT.Canvas.MoveTo(x,y);
            FirstRun := false;
          end;
// bmpOUT.Canvas.LineTo(x,y);
          bmpOUT.Canvas.Ellipse(x - 5, y - 5, x + 1 + 5, y + 1 + 5);
        end;
      end;

      Inc(LineIN);
      Inc(LineOUT);
    end; // x Achse
  end; // y Achse

end;
Aber das mit den Linien klappt immernoch nicht, meine Vermutung wäre, dass es da mit Canvas vielleicht Probleme gibt (?) Ob ich nun Linien zeichne, oder die Pixel etwas "vergrößere"
Delphi-Quellcode:
       if(DisplayMethod = dmLines) then
        begin
          if( FirstRun ) then
          begin
  // bmpOUT.Canvas.MoveTo(x,y);
            FirstRun := false;
          end;
// bmpOUT.Canvas.LineTo(x,y);
          bmpOUT.Canvas.Ellipse(x - 5, y - 5, x + 1 + 5, y + 1 + 5);
        end;
Aber einer bestimmten Position werden die Punkte auf der linken Seite auch auf die Rechte Übertrage (siehe Lines1.jpg ganz oben)

Das erste Problem konnte ich wie folgt lösen:
Delphi-Quellcode:
BitmapIN.LoadFromFile('images/'+i2+'.bmp');
BitmapOUT.PixelFormat := BitmapIN.PixelFormat;
ScanPicture(BitmapIN, BitmapOUT);
BitmapOUT.SaveToFile('images/Analysiert'+i2+'.bmp');
grüße
Florian

EDIT:
Als Anhang einmal das bild mit Lines und Pixels(Such)...so sieht es richtig aus....darüber gelegt das Bild was ich erhalte, wenn ich das ganze mit Ellipse (siehe oben) mache...die Ellipsen sind alle ein stück nach links verschoben bzw. tauchen auf der falschen Seite auf... :/ Kann es denn an Canvas liegen? Denn jetzt wo ich die einzelnen Pixel ohne Canvas einfärbe da klappt es recht gut.

UND mit ist noch etwas aufgefallen...
der erste Punkt liegt in dem BMP bei den Koordinate (293|121)...selbst Nachgeschaut...das Programm liefter als Koordinaten aber
X> [219] Y>[121]...
Wenn ich den Pixel mit Scanlines einfärbe klappt alles, versuche ich dasselbe mit (Pixels :=) so endet es im Chaos...woher könnten die Falschen Koordinaten herrühren?
Miniaturansicht angehängter Grafiken
multi_630.jpg  
  Mit Zitat antworten Zitat