lustiger videoeffekt [alle bb]

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

 

$tankY

Betreff: lustiger videoeffekt [alle bb]

BeitragMo, Jan 02, 2006 15:27
Antworten mit Zitat
Benutzer-Profile anzeigen
hab mich ma n bisschen mit read/writepixel(fast) beschäftgigt und diesen witzigen code geschrieben Laughing :
Code: [AUSKLAPPEN]

;Bei Bewegung rot, sonst grün
Const toleranz=10

file$=RequestFile$("Video laden","")
; file$ bei anderen bb ausser bb+ durch datei ersetzen!

If FileType(file$)<>1 RuntimeError "Konnte Video nicht laden!"

video=OpenMovie(file$)
width=MovieWidth(video)
height=MovieHeight(video)

Dim oldpixel(width,height)
Dim pixel(width,height)

Graphics width,height,0,2
SetBuffer BackBuffer()

Repeat

Cls

DrawMovie(video,0,0)

start=MilliSecs()
LockBuffer BackBuffer()

For i=0 To width
   For j=0 To height
      oldpixel(i,j)=pixel(i,j)
      pixel(i,j)=ReadPixelFast(i,j)
      comparepixel(i,j,oldpixel(i,j),pixel(i,j))
   Next
Next

UnlockBuffer BackBuffer()

Color 0,0,255
Text 0,0,MilliSecs()-start

Flip

Until KeyHit(1) Or MoviePlaying(video)=0

Function comparepixel(x,y,rgb1,rgb2)
   r1=(rgb1 And $FF0000)/$10000
   g1=(rgb1 And $FF00)/$100
   b1=rgb1 And $FF
   r2=(rgb2 And $FF0000)/$10000
   g2=(rgb2 And $FF00)/$100
   b2=rgb2 And $FF
   
   If Abs((r1+g1+b1)-(r2+g2+b2))>toleranz Then
      rgb=255*$10000 + 0*$100 + 0
      WritePixel(x,y,rgb)
   Else
      rgb=0*$10000 + 255*$100 + 0
      WritePixel(x,y,rgb)
   EndIf
End Function


der code prüft ein video auf pixelfarbenänderung und färbt die pixel in rot, welche sich verändert haben, der rest bleibt grün!
  • Zuletzt bearbeitet von $tankY am Mo, Jan 02, 2006 22:31, insgesamt einmal bearbeitet

Artemis

BeitragMo, Jan 02, 2006 18:45
Antworten mit Zitat
Benutzer-Profile anzeigen
hi sieht nice aus.

MBC

BeitragMo, Jan 02, 2006 19:38
Antworten mit Zitat
Benutzer-Profile anzeigen
hey

ist n schöner effekt, gefällt mir gut... ich hatte mich dadran auch ma vor ner zeit versucht (sollte eigentlich die grundlage für so ne kleine bewegegungserkennersoftware mittels webcam werden... dummerweise scheiter ich an der einbindung der webcam xD)... naja, das is jedenfalls bei mir rausgekommen:

Code: [AUSKLAPPEN]

Const xsize=400
Const ysize=300
Dim pixel(xsize,ysize)
toleranz=10
Const pixel_anzahl=xsize*ysize
p_anzahl1=pixel_anzahl/2
Const bewegometer#=500.0/pixel_anzahl


Graphics 800,600,32,2
SetBuffer BackBuffer()
ClsColor 150,150,150

stream=OpenMovie("test.avi")



Repeat
DrawMovie stream,0,0,xsize,ysize

Color 255,0,0
If RectsOverlap(MouseX(),MouseY(),1,1,0,0,xsize*2,ysize) Then
  Rect 0,0,xsize*2,ysize,0
  If MouseHit(1) Then draw=1-draw
EndIf


If toleranz<10 Then
  toleranz=toleranz+MouseZSpeed()
Else
  toleranz=toleranz+MouseZSpeed()*5
EndIf
If toleranz<0 Then toleranz=0
If toleranz>255 Then toleranz=255
Text 10,ysize+20,"Toleranz: "+toleranz


If MilliSecs()-fps_timer>1000 Then
  fps=counter
  counter=0
  fps_timer=MilliSecs()
EndIf
counter=counter+1
Text 10,ysize+35,"FPS: "+fps


LockBuffer()

For x=0 To xsize Step 3
  For y=0 To ysize Step 3


    c=ReadPixelFast(x,y)

    r=(c And $FF0000)/$10000
    g=(c And $FF00)/$100
    b=c And $FF
    a=(r+g+b)/3


    r2=(pixel(x,y) And $FF0000)/$10000
    g2=(pixel(x,y) And $FF00)/$100
    b2=pixel(x,y) And $FF
    a2=(r2+g2+b2)/3

    If Abs(a-a2)>=toleranz Then 
      r=Abs(a1-a2) : g=Abs(a1-a2) : b=0
      z=z+9

      d=a*$1000000 + r*$10000 + g*$100 + b
 
      If draw=0 Then
        WritePixelFast x+xsize,y,d
        WritePixelFast x+xsize+1,y,d
        WritePixelFast x+xsize,y+1,d
        WritePixelFast x+xsize+1,y+1,d
        WritePixelFast x+xsize+2,y,d
        WritePixelFast x+xsize,y+2,d
        WritePixelFast x+xsize+2,y+1,d
        WritePixelFast x+xsize+1,y+2,d
        WritePixelFast x+xsize+2,y+2,d
      Else
        WritePixelFast x,y,d
        WritePixelFast x+1,y,d
        WritePixelFast x,y+1,d
        WritePixelFast x+1,y+1,d
        WritePixelFast x+2,y,d
        WritePixelFast x,y+2,d
        WritePixelFast x+2,y+1,d
        WritePixelFast x+1,y+2,d
        WritePixelFast x+2,y+2,d
      EndIf
    EndIf
    pixel(x,y)=c

  Next
Next

UnlockBuffer()

Color 220,0,0

Rect 150,500,bewegometer*z,50
Color 0,0,0
Text 400,450,"BEWEG - O - METER",1,1
Text 400,470,"Anzahl Bewegungen zwischen zwei Frames",1
Text 150,560,"0",1
Text 650,560,pixel_anzahl,1
Text 400,560,p_anzahl1,1
Rect 150,500,500,50,0
For x=170 To 640 Step 20
  Rect x,525,2,25
Next

average=average+z
az=az+1
;Durchschnitt bewegungen / sekunde
If timer+1000<MilliSecs() Then
  timer=MilliSecs()
  average=average/az
  av=average
  az=0
  average=0
EndIf
Color 255,0,0
Text 10,ysize+50,"Veränderte Pixel: "+av
If z/3>av Then Text 10,420,"SZENENWECHSEL!"
 
z=0


Flip
Cls
Until KeyHit(1) Or MoviePlaying(stream)=0
End


sry, ist teilweise ziemlich wirr, aber war ja eigentlich auch nich für die öffentlichkeit gedacht... naja^^... also nicht an diesem "szenenwechsel" und zeugs stören, dass funzt noch nich so zuverlässig Wink
Computer sind auch nur Menschen! Wink
 

$tankY

BeitragMo, Jan 02, 2006 21:28
Antworten mit Zitat
Benutzer-Profile anzeigen
dein Quelltext macht im prinzip das selbe wie meiner.
will eigentlich auch sowas wie ein bewegungserkenner machen Laughing , hab dann gesehn, dass das ziemlich witzig ausschaut und hab noch n paar andre 'videoeffekte' gemacht^^, ich lad die ma hoch, sind ganz simpel gehalten

Waveblue

BeitragMo, Jan 02, 2006 21:38
Antworten mit Zitat
Benutzer-Profile anzeigen
konnte es nicht starten, tanky!

schreib mal hin, das es nur mit Blitzplus funktioniert!
This is 10% luck
20% skill
15% concentrated power of will
5% pleasure, 50% pain
and 100% reason to remember the name
 

$tankY

BeitragMo, Jan 02, 2006 22:30
Antworten mit Zitat
Benutzer-Profile anzeigen
lol, musst doch nur requestfile durch die file ersetzen, sry

Edit: so, hier is der rest (is nix besonderes, nur so spielereien^^)

Edit #2: Da geocities bald schließt:

Färbt das Video in verschiedene Graustufen ein:
Code: [AUSKLAPPEN]
;Graufärbung (bb+, wenn man zeile 3 modifiziert, dann auch für den rest)
;(c) 2006 by $tanky aka Steven Cardoso

file$=RequestFile$("Video laden","")
If FileType(file$)<>1 RuntimeError "Konnte Video nicht laden!"

video=OpenMovie(file$)
width=MovieWidth(video)
height=MovieHeight(video)

Graphics width,height,0,2
SetBuffer BackBuffer()

Repeat

Cls

DrawMovie(video,0,0)

LockBuffer BackBuffer()

For i=0 To width
   For j=0 To height
      GreyPixel(i,j)
   Next
Next

UnlockBuffer BackBuffer()

Flip

Until KeyHit(1) Or MoviePlaying(video)=0

Function GreyPixel(x,y)
   rgb=ReadPixelFast(x,y)
   r=(rgb And $FF0000)/$10000
   g=(rgb And $FF00)/$100
   b=rgb And $FF
   a=((r+g+b)/3)
   rgb=a*$10000 + a*$100 + a
   WritePixel(x,y,rgb)
End Function


Invertiert die Farben eines Videos:
Code: [AUSKLAPPEN]
;InvertColor (Vertauscht die Farben eines Videos)
;(bb+, wenn man zeile 4 modifiziert, dann auch für den rest)
;(c) 2006 by $tanky aka Steven Cardoso

file$=RequestFile$("Video laden","")
If FileType(file$)<>1 RuntimeError "Konnte Video nicht laden!"

video=OpenMovie(file$)
width=MovieWidth(video)
height=MovieHeight(video)

Graphics width,height,0,2
SetBuffer BackBuffer()

Repeat

Cls

DrawMovie(video,0,0)

LockBuffer BackBuffer()

For i=0 To width
   For j=0 To height
      InvertPixel(i,j)
   Next
Next

UnlockBuffer BackBuffer()

Flip

Until KeyHit(1) Or MoviePlaying(video)=0

Function InvertPixel(x,y)
   rgb=ReadPixelFast(x,y)
   r=(rgb And $FF0000)/$10000
   g=(rgb And $FF00)/$100
   b=rgb And $FF
   r=255-r
   g=255-g
   b=255-b
   rgb=r*$10000 + g*$100 + b
   WritePixel(x,y,rgb)
End Function


zeichnet das video in blöcke (größe definierbar):
Code: [AUSKLAPPEN]
;VideoBlock (färbt die umgebenen Blöcke in die Farbe des ersten Blockes!)
;(bb+, wenn man zeile 6 modifiziert, dann auch für den rest)
;(c) 2006 by $tanky aka Steven Cardoso

Const blocksize=10

file$=RequestFile$("Video laden","")
If FileType(file$)<>1 RuntimeError "Konnte Video nicht laden!"

video=OpenMovie(file$)
width=MovieWidth(video)
height=MovieHeight(video)

Graphics width,height,0,2
SetBuffer BackBuffer()

Repeat

Cls

DrawMovie(video,0,0)

For i=0 To width Step blocksize
   For j=0 To height Step blocksize
      rgb=ReadPixel(i,j)
      r=(rgb And $FF0000)/$10000
      g=(rgb And $FF00)/$100
      b=rgb And $FF
      Color r,g,b
      Rect i,j,i+blocksize,j+blocksize,1
   Next
Next

Flip

Until KeyHit(1) Or MoviePlaying(video)=0


Färbt die Pixel entweder in schwarz oder weiss:
Code: [AUSKLAPPEN]
;SchwarzWeiss Färber (färbt die Pixel entweder in schwarz oder in weiss)
;(bb+, wenn man zeile 4 modifiziert, dann auch für den rest)
;(c) 2006 by $tanky aka Steven Cardoso

file$=RequestFile$("Video laden","")
If FileType(file$)<>1 RuntimeError "Konnte Video nicht laden!"

video=OpenMovie(file$)
width=MovieWidth(video)
height=MovieHeight(video)

Graphics width,height,0,2
SetBuffer BackBuffer()

Repeat

Cls

DrawMovie(video,0,0)

LockBuffer BackBuffer()

For i=0 To width
   For j=0 To height
      SWPixel(i,j)
   Next
Next

UnlockBuffer BackBuffer()

Flip

Until KeyHit(1) Or MoviePlaying(video)=0

Function SWPixel(x,y)
   rgb=ReadPixelFast(x,y)
   r=(rgb And $FF0000)/$10000
   g=(rgb And $FF00)/$100
   b=rgb And $FF
   a=((r+g+b)/3)
   If a<=127 Then
      a=0
   Else
      a=255
   EndIf
   rgb=a*$10000 + a*$100 + a
   WritePixel(x,y,rgb)
End Function

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group