Weich zeichnen

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

ToeB

Betreff: Weich zeichnen

BeitragFr, Mai 30, 2008 18:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie kann ich selber sowas machen, dass wenn ich ein Bild habe (Schwarz-weiß) und möchte es verwishcen, also so dass sich z.b. ein Kreis in der Mitte des Bildes mit der Farbe 255,255,255 auf dem Untergrung 0,0,0 dann in der mitte 255,255,255 hat und dann immere Dunkler wird , also als ob es langsam Trasparent wird nach außen hin ?

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!

DerHase

BeitragFr, Mai 30, 2008 19:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Du nimmst nen Pixel und mischt aus den benachberten Pixeln die Farbwerte in bestimmten Anteilen mit rein, kuck dir mal die RGB Befehele an. Die Pixel sollte man aus den Originalbild auslesen und nicht aus dem bereits veränderten, also schön Buffer und so, sonst hat man lustige Effekte, machnmal sind die auch wünschenswert Wink
Play Satyr!
 

E. Urbach

ehemals "Basicprogger"

BeitragFr, Mai 30, 2008 19:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Nicht die schnellste Variante, aber die einfachste:
Code: [AUSKLAPPEN]
Const precisionInv = 1

Function Oval2(x, y, width, height, r# = 1.0, g# = 1.0, b# = 1.0)
   Local radius = (width / 2)
   Local rgbFactor# = 255.0 / radius
   
   For I = 0 To radius Step precisionInv
      Color I * r * rgbFactor, I * g * rgbFactor, I * b * rgbFactor
      Oval x + I, y + I, width - I * 2, height - I * 2
   Next
End Function

Ist nicht Realtime-fähig, aber wenn du precisionInv etwas höher stellst läuft die Funktion schneller.

Beispiel:
Code: [AUSKLAPPEN]
Graphics 640, 480, 32, 2
SetBuffer BackBuffer()

Repeat
   Cls
   
   Oval2 GraphicsWidth() / 2 - 250, GraphicsHeight() / 2 - 250, 500, 500, 1.0, 0.0, 0.0
   
   Flip
Until KeyDown(1)
End

Const precisionInv = 1

Function Oval2(x, y, width, height, r# = 1.0, g# = 1.0, b# = 1.0)
   Local radius = (width / 2)
   Local rgbFactor# = 255.0 / radius
   
   For I = 0 To radius Step precisionInv
      Color I * r * rgbFactor, I * g * rgbFactor, I * b * rgbFactor
      Oval x + I, y + I, width - I * 2, height - I * 2
   Next
End Function


Edit:
Wenn du keinen einheitlichen Hintergrund hast, musst du die Variante von DerHase nehmen.
The box said, "Requires Windows XP or better", so I installed Ubuntu | Linux is NOT Windows
Flua :: Profiler für BB und BMax :: Partikel-Engine für BMax :: Lyphia-Projekt Quellcode (BMax) :: Automatische Parallelisierung :: Meine Musik
  • Zuletzt bearbeitet von E. Urbach am Sa, Mai 31, 2008 10:55, insgesamt 2-mal bearbeitet

ToeB

BeitragFr, Mai 30, 2008 19:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Okay danke euch beiden !

@DerHase :

Ich habs mal so versucht :

[EDIT]

Okay habs gelöst... Aber wie kann ich einstellen, mit welcher stärke das weich zeichnen soll ?

Code: [AUSKLAPPEN]
Function Weich(img_,x,y,width,height)
   Local pix[5]
   Local Buffer = ImageBuffer(img_)
   Local F[2]
   LockBuffer Buffer
      For xx = 1 To width-1
         For yy = 1 To height-1
            xpos = x + xx
            ypos = y + yy
            pix[0] = 0
            pix[1] = ReadPixelFast(xpos,ypos,Buffer)
            pix[2] = ReadPixelFast(xpos+1,ypos,Buffer)
            pix[3] = ReadPixelFast(xpos-1,ypos,Buffer)
            pix[4] = ReadPixelFast(xpos,ypos+1,Buffer)
            pix[5] = ReadPixelFast(xpos,ypos-1,Buffer)
            F[0]=0:F[1]=0:F[2]=0
            For i = 1 To 5
               cr =(pix[i] And $FF0000)/$10000
               cg =(pix[i] And $FF00)/$100
               cb =(pix[i] And $FF)
               F[0] = F[0] + cr
               F[1] = F[1] + cg
               F[2] = F[2] + cb
            Next
            F[0] = F[0] / 5
            F[1] = F[1] / 5
            F[2] = F[2] / 5
            pix[0] = 1*$1000000+F[0]*$10000+F[1]*$100+F[2]
            WritePixelFast(xpos,ypos,pix[0],Buffer)
         Next
      Next
   UnlockBuffer Buffer
End Function


??

[/EDIT]


thx ToeB
 

buja

BeitragSa, Mai 31, 2008 10:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Du könntest auch von http://east-power-soft.de die ImageFunctions.bb Library benutzen.
Da ist Weichzeichnen dabei. Den grad kann man auch einstellen glaube ich.

mfg
...

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group