Bild-Maskier Utility von ???
Mit diesem Utility kann man leicht den Hintergrund gewisser Bilder maskieren. Beispiel: Blauer Himmel mit einigen Wolken, im Vordergrund ein Ast. Jetzt will man den Hintergrund komplett schwarz haben und den Rest unverändert lassen. Dafür ist dieses Tool. Es ist vor allem für Leute, die grad keine komplexe Grafik-Anwendung zur Hand haben. Zudem finde ich, das Ergebnis ist besser als in Photoshop. Allerdings sollte man am Ende noch mit einem Grafikprogramm die antialiasten Pixel der Konturen, die nicht maskiert wurden, mit "Hue" anpassen.

Ich verwende das Tool hauptsächlich für Pflanzen, die ich mit blauem Himmel als Hintergrund fotografiert hab und im Mode 4 auf ne Textur mappen will (Gras, Äste usw.).

Bei diesem Utility lassen sich r/g/b Grenzwerte mit Fadern in (mehr oder weniger) Echtzeit ändern. Es gibt auch einen Toleranz Parameter. Das Laden und Saven der Datei (bzw. der Pfad) sind hier direkt in den Code geschrieben, das sollte man ev. noch ändern. Geeignet für Bilder mit max. Bildschirmhöhe ^2 Grösse, also z.B: 256*256 od. 512*512
[code:1:72f20b644b]
Graphics 800,600,16,2
SetBuffer BackBuffer()
a$="ast1.bmp"
a2$="ast1b.bmp"
TFormFilter 0

Global img=LoadImage(a$)
Global imgbk=CopyImage(img)
DrawBlock img,0,0
rgb=ReadPixel(i,j)
r=(rgb Shr 16) And 255
g=(rgb Shr 8 ) And 255
b=rgb And 255
t=100


ClsColor 200,100,0
While KeyDown(1)=0
If MouseDown(1)
If dodo=0
mx=MouseX()
dodo=1
EndIf
my=MouseY()
If my>=100 And my<=366
myp=min(255,my-100)
If mx>=0 And mx<10
r=myp
EndIf
If mx>=10 And mx<20
g=myp
EndIf
If mx>=20 And mx<30
b=myp
EndIf
If mx>=30 And mx<40
t=myp
EndIf
EndIf
mask(r,g,b,t)
Else
dodo=0
EndIf
Cls
DrawImage img,100,0
sliders(r,g,b,t)
Flip
Wend

SaveBuffer(ImageBuffer(img),a2$)


End

;-----------------------------------------------------------------------------------------

Function mask(sr,sg,sb,st)
CopyRect 0,0,512,512,0,0,ImageBuffer(imgbk),ImageBuffer(img)
SetBuffer ImageBuffer(img)
LockBuffer
For j=0 To ImageHeight(img)-1
For i=0 To ImageWidth(img)-1
rgb=ReadPixelFast(i,j)
r=(rgb Shr 16) And 255
g=(rgb Shr 8 ) And 255
b=rgb And 255
If (r>sr-st And r<sr+st) And (g>sg-st And g<sg+st) And (b>sb-st And b<sb+st) Then
WritePixelFast i,j,0 ; maskiert
Else
WritePixelFast i,j,rgb ; nicht maskiert
EndIf
Next
Next
UnlockBuffer
SetBuffer BackBuffer()
End Function

Function min(zahl,min)
If zahl> min Then
Return min
Else
Return zahl
EndIf
End Function

Function max(zahl,max)
If zahl< max Then
Return max
Else
Return zahl
EndIf
End Function

Function sliders(r,g,b,t)
Color 255,0,0
Rect 0,100,9,266,0
Rect 0,100+r,9,9,1
Text 0,0,"Red "+r

Color 0,255,0
Rect 10,100,9,266,0
Rect 10,100+g,9,9,1
Text 10,16,"Green "+g

Color 0,0,255
Rect 20,100,9,266,0
Rect 20,100+b,9,9,1
Text 20,32,"Blue "+b

Color 127,127,127
Rect 30,100,9,266,0
Rect 30,100+t,9,9,1
Text 30,48,"Tolerance "+t

End Function
[/code:1:72f20b644b]
===
von ???
Die Äste dieser Bäume habe ich mit diesem Tool maskiert. Ein Baum hat nur etwa 20-40 Tris:
[img:adf1bbc8b8]http://www.melog.ch/screens/wald1.jpg[/img:adf1bbc8b8]
===
von ???
Hi Norc.

Grfällt mir gut das Programm. Werd ich noch mal mit versch. Grafiken testen.

Was mir allerdings aufgefallen ist:
Du lädst eine PNG Datei und speicherst das auch als PNG Datei ab.
In Wirklichkeit ists allerdings eine BMP Datei.
Ergo:
[code:1:b2a8da4e92]a$="star.png"
a2$="star1.bmp" ; <--- BMP!
[/code:1:b2a8da4e92]

cu
===
von ???
@Keimax
Gespeichert wird als BMP in
[code:1:101feabfbb]
SaveBuffer(ImageBuffer(img),a2$)
[/code:1:101feabfbb]
Vollkommen legitim.

[edit]
Jetzt sehe ich, was du meinst. Anyway, ein gutes Programm differenziert ohnehin nicht über die Dateiendung, sondern über deren Inhalt :wink:.
[/edit]
===
von ???
Ach ja, das mit dem png ist ein kleiner bug. Nebenbei gesagt: ich bin froh, Blitz hat heute eine Header Erkennung. So kann ich für Modelle, die mit BMP gemappt sind, einfach ein JPG nehmen und in .BMP umbenennen. ohne das Modell extra in Lithi zu laden.



Suche:
(unterstützt mySQL Wildcards ala %)
Titel:
Text:
Autor: