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