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. |