Pixel auf Surface zaehlen

  • Pixel auf Surface zaehlen

    Hallo Kollegen,

    ich habe mich seit langem wieder an ein Projekt gewagt und auch schon das erste Problem, wo ich bisher keine wirkliche Lösung gefunden habe!

    Ich habe ein Objekt welches sich in meinem Raum bewegt und eine Spur auf ein Surface malt. Nun möchte ich herausfinden wie groß die Pixeldifferenz zwischen der Spur und meiner Raumgröße ist.

    Also prinzipiel möchte ich die Pixel der Spur zählen und von der Raumgröße abziehen, nur leider habe ich bisher keine wirkliche Lösung dafür gefunden.

    Im Anhang findet sich ein Beispielbild damit ihr besser versteht was ich meine,

    ich hoffe ihr könnt mir einen Ansatz liefern wie ich das am besten Lösen kann :)

    Mit freundlichen Grüßen

    Blayde
    Bilder
    • Spur.PNG

      16,87 kB, 721×536, 54 mal angesehen
  • Du könntest dich mit einem art raster scan ranapproximieren. Da die get_colou_pixel(oder wie sie heißt) Funktion extrem performance frisst.
    Dein Raster wird immer kleiner (von 64x64 zu 4x4 zB) und immer in der Mitter einer solchen Zelle checkst du die Farbe. Wenn sie hellgrün ist dann machst du dort das raster kleiner und checkst wieder den Mittelpunkt, bis du entweder dunkelgrün einscannst oder der Raster die minimalgröße erreicht hat.
    Am Ende hast du verschieden große Quadrate mit den Werten 0 oder 1 für grün oder hellgrün und deren Flächeninhalt kannst du zusammenzählen.

    Edit: um es zu verdeutlichen. Eine Zelle beginnt mit zB64x64 pixel und wird geviertelt wenn sie auf hellgrün trifft, dann werden diese 4 Zellen geprüft usw.

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
  • Hallo Aku,
    Danke für deine schnelle und gute idee. Ich werde mir mal überlegen ob ich das so umsetzten werde.

    Ich hatte gehofft es wäre möglich aus dem hellgrünen streifen eine Art Surfacemaske zu erstellen deren Pixelgrösse ich dann auslesen kann. Denn alles was hellgrün ist, befindet sich ja auf dem surface, das dunkelgrüne ist lediglich hintergrund.

    Falls noch jemand eine idee hat, darf er sie mir gerne nennen :)

    Mit freundlichen grüssen

    Blayde
  • Hi, ich habe Aku_Ryou's Ansatz nicht im Ansatz kapiert :D

    Aber wie wär's wenn du einen Grid, mit der Größe des Raumes erstellst. Dann soll das Objekt das den Weg zeichnet mit dem selben Radius, mit dem es sich durch den Raum malt, via ds_grid_set_disk das gleiche mit dem Grid machen. Mit dem Wert 1. Die anderen Zellen bleiben bei 0. Wenn du dann ds_grid_get_sum machst, erhältst du die Pixelanzahl des Gemaltem.

    edit: Ok ich habe Aku_Ryou's Idee verstanden.:D