Kontur finden - wie? [GELÖST]
Übersicht BlitzBasic Beginners-Corner
BadDeathBetreff: Kontur finden - wie? [GELÖST] |
Di, Jul 15, 2008 23:25 Antworten mit Zitat |
|
---|---|---|
So, für mein aktuelle Projekt muss ich die Kontur eines Bildes rausschneiden, theoretisch weiß ich ja auch wie, da der hintergrund bereits einfargbig mit RGB(255,0,255) gefärbt wurde.
nun versuche ich es mit folgendem code: Code: [AUSKLAPPEN] For i=1 To Counter
Bild = LoadImage(Projekt+"\Step 2 - " + Int(i) + ".bmp") SetBuffer ImageBuffer(Bild) LockBuffer ImageBuffer(Bild) For x = 1 To ImageWidth(Bild) - 1 Fremd = 1 For y = 1 To ImageHeight(Bild) - 1 RGB2 = ReadPixelFast(x, y, ImageBuffer(Bild)) rr = (RGB2 And $FF0000) / $10000 gg = (RGB2 And $FF00) / $100 bb = RGB2 And $FF If rr <> 255 And gg <> 0 And bb <> 255 Then If Fremd Then WritePixelFast x,y,RGB(255,0,255) Fremd = 1 Else If Fremd Then WritePixelFast x,y,RGB(255,0,255) Fremd = 0 End If Next Next AppTitle "Zu " + Str(i/Counter*100) + "% fertig" UnlockBuffer SaveBuffer (ImageBuffer(Bild),Projekt+"\Step 3 - " + Int(i) + ".bmp") Next wenn ich nun dieses bild nehme: https://www.blitzforum.de/upload/file.php?id=3158 kommt dieses bild raus: https://www.blitzforum.de/upload/file.php?id=3159 also bemerkt er nicht, dass der hintergrund wieder anfängt. Kann mir bitte jemand helfen? DANKE!! ~Editiert~ Keine BMP-Bilder direkt einbinden! Eigentlich sollte man ohnehin niemals BMP im Internet benutzen. Durch Links ersetzt. MfG D2006 |
||
- Zuletzt bearbeitet von BadDeath am Mi, Jul 16, 2008 1:06, insgesamt einmal bearbeitet
Marek |
Di, Jul 15, 2008 23:47 Antworten mit Zitat |
|
---|---|---|
Vorneweg, ich hab den Code nicht durchgelesen! Den Bildern nach zu urteilen, könntest du versuchen das ganze mit Winkeln zu machen. Dein Programm arbeitet momentan ja von oben nach unten, so wies aussieht und findet dabei die Kante. Das ist der Fall bei 0°. Bei 180° musst du das Prog nur so umschreiben das es von unten nach oben läuft. 90° und 270° sind dann von links nach rechts und von rechts nach links. dann musst du die Bilder nur noch übereinanderlegen. Am besten bei den Bildern bei 90° 180° und 270° das rosa durchsichtig machen und dann auf das Bild bei 0° zeichnen. Sollte dann schon besser aussehen, wenn auch nicht perfekt Leider dauert es aber auch 4x länger...
MfG Marek |
||
Wer lesen kann ist klar im Vorteil... |
BadDeath |
Di, Jul 15, 2008 23:49 Antworten mit Zitat |
|
---|---|---|
mhh, eigentlich sollte es ja auch so gehen, rein vom logischen her...aber ich werde es nachher mal testen
danke schonmal ---------------- [EDIT] ---------------- Gut, es geht nun: Code: [AUSKLAPPEN] For i=1 To Counter
Bild = LoadImage(Projekt+"\Step 2 - " + Int(i) + ".bmp") SetBuffer ImageBuffer(Bild) LockBuffer ImageBuffer(Bild) For x = 1 To ImageWidth(Bild) - 1 Fremd = 0 For y = 1 To ImageHeight(Bild) RGB2 = ReadPixelFast(x, y, ImageBuffer(Bild)) r = (RGB2 And $FF0000) / $10000 g = (RGB2 And $FF00) / $100 b = RGB2 And $FF If r = 255 And g = 0 And b = 255 Then If Fremd Then WritePixelFast x,y,RGB(255,255,255) Fremd = 0 Else If Fremd = 1 Then WritePixelFast x,y,RGB(255,0,255) Fremd = 1 End If If Fremd = 0 Then Fremd = 1 WritePixelFast x,y,RGB(255,255,255) End If End If Next Next AppTitle "Zu " + Str(i/Counter*100) + "% fertig" UnlockBuffer SaveBuffer (ImageBuffer(Bild),Projekt+"\Step 3 - " + Int(i) + ".bmp") Next Irgendwie stand ich vorher auf dem Schlauch ^^ PS: das Ergebnis nun, zwar noch nicht ganz perfekt, aber werde ich schon schaffen: https://www.blitzforum.de/upload/file.php?id=3161 ~Editiert~ Keine BMP-Bilder direkt einbinden! Eigentlich sollte man ohnehin niemals BMP im Internet benutzen. Durch Links ersetzt. MfG D2006 |
||
-~= real coders just code in binary =~- |
ToeB |
Mi, Jul 16, 2008 12:55 Antworten mit Zitat |
|
---|---|---|
Was meinst du mit Konturen ? Sowas wie Umriss ? Weil ich hab da mal ne Function zu geschrieben... Musse mal im Codearchiv gucken
mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
BadDeath |
Mi, Jul 16, 2008 21:40 Antworten mit Zitat |
|
---|---|---|
Habe ich ich gefunden ^^
Super Code, läuft besser als meiner, bei dir gibt es ne durchgezogene Linie. Habe meinen mal gleich durch deinen Ersetzt. Danke! Nun stehe ich vor einem weiterem Problem, welches eigentlich keins für Anfänger ist, wollte aber keinen neuen Thread auf machen. Undzwar setze ich dann für jeden weißen Pixel einen Würfel in den Raum und das mit mehreren Bildern, die eine "Scheibe" darstellen. Am Ende habe ich dann ein Objekt aus vielen Würfeln. Ziel soll es sein um die Würfel eine Hülle drum zubauen und diese dann als 3ds, b3d o.ä. zu speichern. Doch ich scheitere schon bei der Hülle.... Nach stundenlangem Suchen fand ich diese tolle DLL: qHull Nun versuche ich die Hülle so zubauen: Code: [AUSKLAPPEN] Mesh = CreateMesh() for .. ;jeden weißen Pixel Local C.Cube = New Cube C\Mesh = CreateCube() AddMesh C\Mesh, Mesh PositionEntity C\Mesh,x,i*2,y ScaleEntity C\Mesh,1,2,1 next ; Hauptschleife If KeyHit(2) Then r=make_hull(mesh, "in.txt", "out.off", 0.00, 1) EntityParent r,mesh PositionEntity r, EntityX(camera), EntityY(camera),EntityZ(camera) EntityAlpha r,.5 EntityFX r,16 EntityShininess r,1 EntityColor r,255,255,0 EndIf Wenn ich nun aber auf die Taste 1 drücke, hält das Programm an, aber es passiert nix, man sicht nur die Würfel - nicht mal nen Fehler! PS: Die Readme und die Beispieldatei las ich bereits.... |
||
-~= real coders just code in binary =~- |
Übersicht BlitzBasic Beginners-Corner
Powered by phpBB © 2001 - 2006, phpBB Group