AlphaPlot und AlphaRect von Rob
Punkte und Rechtecke mit Alphakanal (Transparenz) malen.
Mit Beispielprogramm.

x,y: Koordinaten
r,g,b: rgb-Farbcode
alpha: Transparenz (0-100, nicht sichtbar bis voll überdeckend)


[code:1:7ad930809c]Graphics 640,480,16,2
SetBuffer BackBuffer()

SeedRnd MilliSecs()


For i = 1 To 1000
Color Rnd(0,255), Rnd(0,255), Rnd(0,255)
Oval Rnd(0,640), Rnd(0,480), Rnd(20,200), Rnd(20,200)
Next





For x = 1 To 640
For y = 200 To 280
alphaplot(x,y,255,0,0,x*100/640)
Next
Next


Flip
WaitKey()



Function alphaplot(x,y,r,g,b,alpha)
LockBuffer BackBuffer()
rgb = ReadPixelFast(x,y)

read_rot = (rgb And $FF0000)/$10000
read_gruen = (rgb And $FF00)/$100
read_blau = rgb And $FF

final_rot = read_rot + (alpha * (r - read_rot) / 100)
final_gruen = read_gruen + (alpha * (g - read_gruen) / 100)
final_blau = read_blau + (alpha * (b - read_blau) / 100)

WritePixelFast x,y, final_rot * $10000 + final_gruen * $100 + final_blau
UnlockBuffer BackBuffer

End Function

Function alpharect(x,y,xplus, yplus,r,g,b,alpha)
LockBuffer BackBuffer
For xx = x To x + xplus
For yy = y To y + yplus

rgb = ReadPixelFast(xx,yy)

read_rot = (rgb And $FF0000)/$10000
read_gruen = (rgb And $FF00)/$100
read_blau = rgb And $FF

final_rot = read_rot + (alpha * (r - read_rot) / 100)
final_gruen = read_gruen + (alpha * (g - read_gruen) / 100)
final_blau = read_blau + (alpha * (b - read_blau) / 100)

WritePixelFast xx,yy, final_rot * $10000 + final_gruen * $100 + final_blau

Next
Next
UnlockBuffer BackBuffer
End Function
[/code:1:7ad930809c]
===
von Hot-Bit
Hi,
in der function alpharect():
LOCKBUFFER BACKBUFFER() als ersten Befehl nehmen.
Also außerhalb der Schleifen.
So wie es ist, bremst es nämlich gewaltig !

Toni
===
von Rob
oops, anfängerfehler ^_^ berichtigt...



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