Position von Bestimmten Farben auf Bildern ermitteln

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
kreeph
Beiträge: 98
Registriert: 24.02.2007 11:50

Position von Bestimmten Farben auf Bildern ermitteln

Beitrag von kreeph »

Hallo Leute ich bins mal wieder.
Habe auch gleich eine Frage. Ich habe eine Bilddatei auf der genau eine Pixel eine bestimmte Farbe hat. Jetzt soll mein Programm die Datei durchsuchen nach dieser Farbe und die Position speichern. Wie mache ich das? Muss ich Pixel für Pixel alles einzeln überprüfen oder geht das schneller?
Danke schonmal!
Ich benutze PureBasic 3.30
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

öhm... warauf willst du denn hinaus?

evtl is dein ganzer ansatz änderbar...

du hast ja bei deinem ansatz ein bestimmtes ZIEL, was du machen willst.
kann ja sein, dass ein anderer ansatz erfolgversprechender und schneller is...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
kreeph
Beiträge: 98
Registriert: 24.02.2007 11:50

Beitrag von kreeph »

also sagen wir auf einem Bild (bmp) ist ein bestimmter Punkt (111,111,111). Mein Programm sol an der Stellen in einem Screen ein Sprite erstellen. Dazu brauch ich glaub ich die genauen Koordinaten des Farbpunktes. Ich stell mir das so ähnlich wie in einem anderen Spiel vor in dem ein Level-Editor beiliegt. http://www.tou.has.it. Ich hoffe ihr versteht, was ich meine.
Ich benutze PureBasic 3.30
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

hm... da würde ich dir eher ne tile-engine empfehlen.

da hast du ein array, wo bestimmte werte drinstehen.
die korrespondieren dann mit sprites, die als zusammengesetzter screen dargestellt werden.

die herangehensweise ist das wichtige.

such mal nach den begriffen tile tileengine usw...

deine herangehensweise ist insofern falsch, dass du das komplette bild durchsuchen wolltest, um je einen sprite zu zeichnen.
bei ner tileengine gehst du die komplette map nur ein mal durch, und zeichnest an jeder stelle das entsprechende sprite.
außerdem verwendest du nur ein einziges pix auf der Map für ein z.b. 32x32 großen bereich in der darstellung.
das bedeutet, dass du für einen 32000x32000 großen darstellungsbereich nur ne 1000x1000 große Map benötigst.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Mein Programm sol an der Stellen in einem Screen ein Sprite erstellen.
Verstehe nicht was du meinst. Wie hängen die Sprites mit den Pixeln in einem Bitmap zusammen? Soll das Teil einer Map Engine werden?
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
kreeph
Beiträge: 98
Registriert: 24.02.2007 11:50

Beitrag von kreeph »

Ok ich hab das Problem jetzt einfach mit einer Preference Datei gelöst, die die nötigen Punkte enthält. aber jetzt mal eine neue Frage: Ich habe ein Sprite (Circle) das an Wänden abprallt. Jetzt lade ich auf den Screen ein Transparentes Sprite, welches diesen komplett ausfüllt. Wenn der CircleSprite jetzt eine Wand trifft, sollte er möglichst ,,real'' daran abprallen. Wie kann ich das lösen? ich muss ja im Prinzip rausfinden ob er an einer horizontalen oder vertikalen Wand abprallt. Für seine Bewegung verwende ich eine Variable (für x un eine für y) die ich dann zu seiner Position addiere und bei einer Kollision mit -1 Multipliziere. Gravitation ist auch eingebaut.
Ich benutze PureBasic 3.30
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> Ok ich hab das Problem jetzt einfach mit einer Preference Datei gelöst, die die nötigen Punkte enthält.

aha.. das sagt mir alles.

ich hätte gerne mal verstanden, was du eigentlich vorhattest,
wenn ich schon drauf eingehe und zu helfen versuche.


> ich muss ja im Prinzip rausfinden ob er an einer horizontalen oder vertikalen Wand abprallt.

ja natürlich, das findest du doch automatisch heraus,
wenn du eine vernünftige koordinaten-kollision berechnest.
wie willst du denn auch sonst ermitteln ob er die wand trifft....
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
kreeph
Beiträge: 98
Registriert: 24.02.2007 11:50

Beitrag von kreeph »

Momentan ermittle ich mit SpritePixelCollision(). War früher ein Helicopterspiel, bei dem man seinen Flieger mit der Maus in der Luft halten musste. Wenn der dann was getroffen hat war er futsch. jetzt will ich was mit abprallen machen.
Ich benutze PureBasic 3.30
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

das heißt, diese beiden aussagen sind verbunden?

> Jetzt lade ich auf den Screen ein Transparentes Sprite, welches diesen komplett ausfüllt.
> Momentan ermittle ich mit SpritePixelCollision().

also, mir wäre ein sprite in kompletter screengröße schon zu langsam.

SpritePixelCollision ist irre, irre lahm, da solltest du möglichst drauf verzichten,
zumal du das wirklich nicht benötigst.

schau dir mal diese kollisionsroutinen an, die arbeiten alle mit reinen koordinatenberechnungen, und sind wesentlich performanter.
http://www.purebasic.fr/german/viewtopic.php?t=9093
weiter hinten in dem thread ist auch eine kreis-rechteck-kollision.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
kreeph
Beiträge: 98
Registriert: 24.02.2007 11:50

Beitrag von kreeph »

Der Code geht auf 3.30 leider nicht :( .
Bei mir kommt immer ein verzerrtes Bild raus wenn ich einen Sprite der größer als der Screen ist draufzeichne. also z.B. 7000x768. Wie lässt sich sowas vermeiden?
Ich benutze PureBasic 3.30
Antworten