Bild in schwarz-Weiß-Bild umwandeln

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

AngelD01

Betreff: Bild in schwarz-Weiß-Bild umwandeln

BeitragDi, Apr 13, 2004 18:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!
Ich hab ein kleines Problem und zwar würde ich gerne ein Farb-Bild in ein Schwarz-Weiß-Bild umwandeln. Ich hab da auch schon mal versucht was zu schreiben, aber irgendwie geht das Prog nicht. Das Bild sieht dann hinterher nur irgendwie komisch aus. Also was ist daran Falsch. Achja und ich will es mit WritePixelFast machen.

Code:

Graphics 800, 600
Bild = LoadImage ("sw.bmp")

drawImage Bild, 0, 0
rgb = 0

For y = 0 To ImageHeight (Bild)
    For x = 0 To ImageWidth (Bild)
   
       GetColor (x,y)

       r = ColorRed ()
       b = ColorBlue ()
       g = ColorGreen ()
      
       mittel = (r + b + g) / 3
      
       rgb = rgb + mittel           ;Blau    
       rgb = rgb + (mittel shl 4)   ;Grün
       rgb = rgb + (mittel shl 8)   ;Rot      

       WritePixelFast x, y, rgb

   Next
Next

währe nett, wenn sich das mal einer angucken würde
Danke
Bye
AngelD01

Kryan

BeitragDi, Apr 13, 2004 18:24
Antworten mit Zitat
Benutzer-Profile anzeigen
du must in jedem neuen schleifendurchlauf rgb auf 0 setzen
[edit] muss man bei WritePixelFast nicht irgendwo LockBuffer haben ?????
Webspaceanbieter?
Klick hier!
Kultige Spieleschmiede?
Klick hier!
 

Edlothiol

BeitragDi, Apr 13, 2004 18:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Code:
Graphics 800, 600
Bild = LoadImage ("sw.bmp")

drawImage Bild, 0, 0
rgb = 0

graphicsbuf = GraphicsBuffer() ; <--
LockBuffer graphicsbuf ; <--

SetBuffer ImageBuffer(Bild) ; <--

For y = 0 To ImageHeight (Bild)
    For x = 0 To ImageWidth (Bild)

       rgb = 0 ; <--
   
       GetColor (x,y)

       r = ColorRed ()
       b = ColorBlue ()
       g = ColorGreen ()
     
       mittel = (r + b + g) / 3
     
       rgb = rgb + mittel           ;Blau   
       rgb = rgb + (mittel shl 4)   ;Grün
       rgb = rgb + (mittel shl 8)   ;Rot     

       WritePixelFast x, y, rgb, graphicsbuf ; <--

   Next
Next
UnlockBuffer graphicsbuf ; <--
Versuchs mal so. Hab das jedoch nicht getestet. Ausserdem solltest du statt GetColor ReadPixelFast benutzen.

Clonker

BeitragDi, Apr 13, 2004 18:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Code:

Graphics 800, 600
Bild = LoadImage ("sw.bmp")

drawImage Bild, 0, 0
rgb = 0

LockBuffer(FrontBuffer())
For y = 0 To ImageHeight (Bild)
    For x = 0 To ImageWidth (Bild)

       rgb = ReadPixelFast(x,y)

       a=(rgb AND $FF000000)/$1000000
       r=(rgb AND $FF0000)/$10000
       g=(rgb AND $FF00)/$100
       b=rgb AND $FF

       mittel = (r + b + g) / 3

       r = mittel
       g = mittel
       b = mittel
       
       rgb=a*$1000000 + r*$10000 + g*$100 + b

       WritePixelFast x, y, rgb

   Next
Next
unLockBuffer(FrontBuffer())

waitkey()
Die exzessive Akkumulation von Fremdwörtern suggeriert pseudointellektuelle Kompetenz.

Athlon XP 2800|Radeon 9600 Pro|512MB DDR RAM|240GB Festplatte

Kryan

BeitragDi, Apr 13, 2004 18:38
Antworten mit Zitat
Benutzer-Profile anzeigen
clonker, was ist wenn er in den backbuffer schreibt??
DIe am besten-gehende version:
Code:
Graphics 800, 600
Bild = LoadImage ("sw.bmp")

drawImage Bild, 0, 0
rgb = 0
graphicsbuf=GraphicsBuffer()
LockBuffer(graphicsbuf) ;edit: falscher variablnname davor
For y = 0 To ImageHeight (Bild)
    For x = 0 To ImageWidth (Bild)

       rgb = ReadPixelFast(x,y)

       a=(rgb AND $FF000000)/$1000000
       r=(rgb AND $FF0000)/$10000
       g=(rgb AND $FF00)/$100
       b=rgb AND $FF

       mittel = (r + b + g) / 3

       r = mittel
       g = mittel
       b = mittel
       
       rgb=a*$1000000 + r*$10000 + g*$100 + b

       WritePixelFast x, y, rgb

   Next
Next
unLockBuffer(graphicsbuf)

waitkey()
Webspaceanbieter?
Klick hier!
Kultige Spieleschmiede?
Klick hier!
  • Zuletzt bearbeitet von Kryan am Di, Apr 13, 2004 19:01, insgesamt einmal bearbeitet

Clonker

BeitragDi, Apr 13, 2004 18:58
Antworten mit Zitat
Benutzer-Profile anzeigen
LockBuffer(graphics) ??

so ist noch besser:
Code:

Graphics 800, 600
Bild = LoadImage ("sw.bmp")

drawImage Bild, 0, 0
rgb = 0

LockBuffer()
For y = 0 To ImageHeight (Bild)
    For x = 0 To ImageWidth (Bild)

       rgb = ReadPixelFast(x,y)

       a=(rgb AND $FF000000)/$1000000
       r=(rgb AND $FF0000)/$10000
       g=(rgb AND $FF00)/$100
       b=rgb AND $FF

       mittel = (r + b + g) / 3

       r = mittel
       g = mittel
       b = mittel

       rgb=a*$1000000 + r*$10000 + g*$100 + b

       WritePixelFast x, y, rgb

   Next
Next
unLockBuffer()

waitkey()
Die exzessive Akkumulation von Fremdwörtern suggeriert pseudointellektuelle Kompetenz.

Athlon XP 2800|Radeon 9600 Pro|512MB DDR RAM|240GB Festplatte

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group