Grafik-Funktionen
Übersicht

![]() |
ToeBBetreff: Grafik-Funktionen |
![]() Antworten mit Zitat ![]() |
---|---|---|
So ich hatte mal wieder langeweile und hab ein paar sehr simple Grafik-Funktionen zum Bearbeiten oder Überarbeiten von Bildern.
Die Funktionen : ![]() Weichzeichnet ein Bild "Img". Schleife ist hierbei die Häufigkeit der Weichzeichnung (1 = Normal, > 1 Weicher) ![]() Zeichnet ein Bild "Img" schwarz /weiß. ![]() Blendet das bild "Img2" auf das bild "Img1" mit einem Alpha wert (0-1). ![]() Funktioniert gleich wie BlendImage nur das auf das Bild "Img" eine Farbe geblendet wird (RGBA). Alpah ist auch hier 0-1. Bitte regt euch nicht über die Functionsnamen auf, könnt ja bessere suchen wenn sie euch nicht gefallen ![]() Der Code mal vorab (wegen Codearchiv) Code: [AUSKLAPPEN] Graphics 800,600,16,2
SetBuffer BackBuffer() Global Image = LoadImage("Beispiel.jpg") Global Blend = LoadImage("Blend.bmp") Global Alpha# = 0.256 Global Weich = 3 Global Rot = 255 Global Gruen = 128 Global Blau = 64 Global Stark# = 0.256 DrawImage Image,0,0 Img1 = CopyImage(Image) MS1 = MilliSecs() GR_SchwarzWeiss(Img1) Time1 = MilliSecs() - MS1 DrawImage Img1,ImageWidth(Image)+10,0 DebugLog "Schwarzweiß : "+Time1 Img2 = CopyImage(Image) MS2 = MilliSecs() GR_Weichzeichnung(Img2,Weich) Time2 = MilliSecs() - MS2 DrawImage Img2,0,ImageHeight(Image)+10 DebugLog "Weich : "+Time2 Img3 = CopyImage(Image) MS3 = MilliSecs() GR_BlendImage(Img3,Blend,Alpha) Time3 = MilliSecs() - MS3 DrawImage Img3,ImageWidth(Image)+10,ImageHeight(Image)+10 DebugLog "Blend : "+Time3 Img4 = CopyImage(Image) MS4 = MilliSecs() GR_FarbBild(Img4,Rot,Gruen,Blau,Stark) Time4 = MilliSecs() - Ms4 DrawImage Img4,0,(ImageHeight(Image)+10)*2 DebugLog "Färben : "+Time4 Text 0,0,"Normalbild" Text ImageWidth(Image)+10,0,"Schwarzweißbild ("+Time1+"ms)" Text 0,ImageHeight(Image)+10,"Weichzeichnung mit Stärke = "+Weich Text 0,ImageHeight(Image)+25,"("+Time2+"ms)" Text ImageWidth(Image)+10,ImageHeight(Image)+10,"Blend von zwei Bildern" Text ImageWidth(Image)+10,ImageHeight(Image)+25,"mit Alpha="+Alpha+" ("+Time3+"ms)" Text 0,(ImageHeight(Image)+10)*2,"Färbung mit RGBA " Text 0,(ImageHeight(Image)+17)*2,Rot+","+Gruen+","+Blau+","+Stark+" ("+Time4+"ms)" Flip Delay 250 FlushKeys() WaitKey() Delay 250 FlushKeys() Repeat If KeyDown(200) ScrollY = ScrollY - 10 If KeyDown(208) ScrollY = ScrollY + 10 If KeyDown(203) ScrollX = ScrollX - 10 If KeyDown(205) ScrollX = ScrollX + 10 DrawImage Image,-ScrollX,-ScrollY DrawImage Img1,ImageWidth(Image)+10-ScrollX,-ScrollY DrawImage Img2,0-ScrollX,ImageHeight(Image)+10-ScrollY DrawImage Img3,ImageWidth(Image)+10-ScrollX,ImageHeight(Image)+10-ScrollY DrawImage Img4,0-ScrollX,(ImageHeight(Image)+10)*2-ScrollY Flip Cls Until KeyHit(1) End Function GR_Weichzeichnung(img,intensiv=1) Local Buffer = ImageBuffer(img) Local w = ImageWidth(img) Local h = ImageHeight(img) Local pix[7] LockBuffer Buffer For inten = 1 To intensiv For x = 0 To w-2 For y = 0 To h-2 pix_ = ReadPixelFast(x,y,Buffer) pix[0] = ReadPixelFast(x-1,y-1,Buffer) pix[1] = ReadPixelFast(x+1,y+1,Buffer) pix[2] = ReadPixelFast(x+1,y-1,Buffer) pix[3] = ReadPixelFast(x-1,y+1,Buffer) pix[4] = ReadPixelFast(x+0,y+1,Buffer) pix[5] = ReadPixelFast(x+0,y-1,Buffer) pix[6] = ReadPixelFast(x+1,y+0,Buffer) pix[7] = ReadPixelFast(x-1,y+0,Buffer) R = (pix_ And $FF0000) / $10000 G = (pix_ And $FF00) / $100 B = (pix_ And $FF) For i = 0 To 7 R = R + ((pix[i] And $FF0000) /$10000) G = G + ((pix[i] And $FF00) / $100) B = B + (pix[i] And $FF) Next R = Float(R) / 9.0 G = Float(G) / 9.0 B = Float(B) / 9.0 pix_ = 1*$1000000+R*$10000+G*$100+B WritePixelFast(x,y,pix_,Buffer) Next Next Next UnlockBuffer Buffer End Function Function GR_SchwarzWeiss(Img) Local Buffer = ImageBuffer(img) Local w = ImageWidth(img) Local h = ImageHeight(img) LockBuffer Buffer For x = 0 To w-1 For y = 0 To h-1 pix = ReadPixelFast(x,y,Buffer) R = (pix And $FF0000) / $10000 G = (pix And $FF00) / $100 B = pix And $FF RGB = Int(Float(R+G+B) / 3.0) pix = 1*$1000000+RGB*$10000+RGB*$100+RGB WritePixelFast(x,y,pix,Buffer) Next Next UnlockBuffer Buffer End Function Function GR_BlendImage(Img1,Img2,st#=0.5,mask=$FF000000) st = 3.90625 * st If st <= 0.255 Return Local st1# = 1.0 / st Local st2# = st Local Buffer1 = ImageBuffer(Img1) Local Buffer2 = ImageBuffer(Img2) Local w1 = ImageWidth(Img1) Local h1 = ImageHeight(Img1) Local w2 = ImageWidth(Img2) Local h2 = ImageHeight(Img2) Local w,h If w1 < w2 w = w1 Else w = w2 If h1 < h2 h = h1 Else h = h2 If st => 3.90625 st = 1 LockBuffer Buffer1 LockBuffer Buffer2 For x = 0 To w For y = 0 To h pix1 = ReadPixelFast(x,y,Buffer1) pix2 = ReadPixelFast(x,y,Buffer2) If pix2 <> mask RGB = pix2 Else RGB = pix1 EndIf WritePixelFast(x,y,RGB,Buffer1) Next Next UnlockBuffer Buffer2 UnlockBuffer Buffer1 Return EndIf LockBuffer Buffer1 LockBuffer Buffer2 For x = 0 To w For y = 0 To h pix1 = ReadPixelFast(x,y,Buffer1) pix2 = ReadPixelFast(x,y,Buffer2) If pix2 <> mask R1 = Float((pix1 And $FF0000) / $10000) * st1# G1 = Float((pix1 And $FF00) / $100) * st1# B1 = Float((pix1 And $FF)) * st1# R2 = Float((pix2 And $FF0000) / $10000) * st2# G2 = Float((pix2 And $FF00) / $100) * st2# B2 = Float((pix2 And $FF)) * st2# R = Int(Float(R1 + R2) / 2.0) G = Int(Float(G1 + G2) / 2.0) B = Int(Float(B1 + B2) / 2.0) If R < 0 R = 0 If R > 255 R = 255 If G < 0 G = 0 If G > 255 G = 255 If B < 0 B = 0 If B > 255 B = 255 RGB = 1*$1000000+R*$10000+G*$100+B Else RGB = pix1 EndIf WritePixelFast(x,y,RGB,Buffer1) Next Next UnlockBuffer Buffer2 UnlockBuffer Buffer1 End Function Function GR_FarbBild(Img,R=128,G=64,B=0,st#=0.512) Local Buffer = ImageBuffer(Img) Local w = ImageWidth(Img) Local h = ImageHeight(Img) st# = 3.90625 * st Local st1# = 1.0 / st Local st2# = st LockBuffer Buffer For x = 0 To w-1 For y = 0 To h-1 pix = ReadPixelFast(x,y,Buffer) R2 = Int((((pix And $FF0000) / $10000)*st1 + R*st2) / 2.0) G2 = Int((((pix And $FF00) / $100)*st1 + G*st2) / 2.0) B2 = Int((((pix And $FF))*st1 + B*st2) / 2.0) ; DebugLog R2+","+G2+","+B2 If R2 < 0 R2 = 0 If R2 > 255 R2 = 255 If G2 < 0 G2 = 0 If G2 > 255 G2 = 255 If B2 < 0 B2 = 0 If B2 > 255 B2 = 255 RGB = 1*$1000000+R2*$10000+G2*$100+B2 WritePixelFast(x,y,RGB,Buffer) Next Next UnlockBuffer Buffer End Function Hier mal ein Screenshot : Und der Download für die dateien für das Beispiel : Graphics.rar (~1MB) So ich hoffe manche können was damit anfangen ![]() 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! |
Darren |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
wenn du die intensität des blurens erhöhen willst, solltest du es nicht einfach mehrmals machen lassen, sondern einfach den radius deines pixelsamplings erhöhen... | ||
MFG Darren |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group