Bild in Grau-Tönen

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Dirk Knoop

Betreff: Bild in Grau-Tönen

BeitragDo, Jul 01, 2004 13:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

weiss jemand, wie ein farbiges Bild in Grautönen umgerechnet werden kann, so wie es auf einem Schwarz-Weiss-Fernseher aussehen würde ?

Das farbige Bild soll geladen werden und sofort in s/w dargestellt werden.

Gruß,

Dirk Knoop
www.kostenloser-fussballmanager.de
www.discaim.de - weil Spaß kein Zufall ist
www.torchance.de - ein etwas anderer Fußball-Manager

Mr.Keks

BeitragDo, Jul 01, 2004 13:18
Antworten mit Zitat
Benutzer-Profile anzeigen
-die farbwerte einscannen
-durchschnitt der farbwerte ermitteln
-pixel wieder mit dem errechnetten wert einzeichnen

also wenn du einen pixel mit color 200,100,30 hast, dann rechnest du x = (200+100+30)/3 = 330/3 = 110 und zeichnest einen pixel mit color x,x,x also color 110,110,110 !
MrKeks.net

Sebastian

BeitragDo, Jul 01, 2004 14:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Beim großen Tut von Rob ist was dabei ...
www.robsite.de
Seit 2 Jahren kein BlitzBasic und kein Windows mehr, und stolz darauf !

ChrisAttack

BeitragDo, Jul 01, 2004 15:02
Antworten mit Zitat
Benutzer-Profile anzeigen
warum funktioniert das nicht?

Code: [AUSKLAPPEN]

Graphics 800,600,32,1

;render an image in black and white
Function RenderImageBW(m_image=0)
   image = CopyImage(m_image)
   w = ImageWidth(image)
   h = ImageHeight(image)
   SetBuffer ImageBuffer(image)
   LockBuffer ImageBuffer(image)
      For s_w = 0 To w
         For s_h = 0 To h
                rgb=ReadPixelFast(s_w,s_h)
                a=(rgb And $FF000000)/$1000000
                r=(rgb And $FF0000)/$10000
                g=(rgb And $FF00)/$100
                b=rgb And $FF
                f_color = (r+g+b)/3
                f_rgb=a*$1000000 + r*$10000 + g*$100 + b
                WritePixelFast s_w,s_h,f_rgb
         Next
      Next
   UnlockBuffer ImageBuffer(image)
   Return image
End Function



bild = LoadImage("bild.JPG")
neu = RenderImageBW(bild)

SetBuffer BackBuffer()

Repeat

DrawImage neu,0,0

Flip
Until KeyHit(1)

B3D
MSVC++
DX9SDK
 

Edlothiol

BeitragDo, Jul 01, 2004 15:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
For s_w = 0 To w - 1 ; <-----
         For s_h = 0 To h - 1  ; <-----
                rgb=ReadPixelFast(s_w,s_h)
                a=(rgb And $FF000000)/$1000000
                r=(rgb And $FF0000)/$10000
                g=(rgb And $FF00)/$100
                b=rgb And $FF
                f_color = (r+g+b)/3
                f_rgb=f_color*$10000 + f_color*$100 + f_color ; <--- f_color, nicht r,g,b
                WritePixelFast s_w,s_h,f_rgb
         Next
      Next
 

René Meyer

BeitragDo, Jul 01, 2004 16:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Wandle es doch vorher in s/w um. Graphikprogramme wie Paint Shop Pro und Irfanview haben eine entsprechende Funktion.
www.blitzbasic.de | Das Buch zu Blitz Basic: www.schreibfabrik.de/txt/bbb

Travis

BeitragDo, Jul 01, 2004 16:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Diese Funktion wandelt ein Bild in Graustufen um. Die Ausgangsdatei wird dabei überschrieben.

Code: [AUSKLAPPEN]

Function ConvertSW(File$)

 Bild = LoadImage(File$)
 LockBuffer ImageBuffer(Bild)

 For y = 0 To ImageHeight(Bild)
  For x = 0 To ImageWidth(Bild)
   rgb = ReadPixelFast(x,y,ImageBuffer(Bild))
   a=(rgb And $FF000000)/$1000000
   r=(rgb And $FF0000)/$10000
   g=(rgb And $FF00)/$100
   b=rgb And $FF

   rgb=a*$1000000 + b*$10000 + b*$100 + b
   WritePixelFast(x,y,rgb,ImageBuffer(Bild))
  Next
 Next
 
 UnlockBuffer ImageBuffer(Bild)

 SaveBuffer(ImageBuffer(Bild),File$) ; Ausgangsdatei überschreiben

End Function
www.funforge.org

Ich hasse WASD-Steuerung.

Man kann alles sagen, man muss es nur vernünftig begründen können.
 

Edlothiol

BeitragDo, Jul 01, 2004 16:04
Antworten mit Zitat
Benutzer-Profile anzeigen
... und wenn das Bild z.B. nur aus Rot - Abstufungen besteht, ists hinterher schwarz. Ausserdem brauchst du r und g gar nicht berechnen.

Xenon

BeitragDo, Jul 01, 2004 16:08
Antworten mit Zitat
Benutzer-Profile anzeigen
https://www.blitzforum.de/viewtopic.php?p=45827

TheShadow

Moderator

BeitragDo, Jul 01, 2004 17:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Bitte keinen Durchschnitt aus (r+g+b)/3 berechnen! Das menschliche Auge sieht die Farben unterschiedlich stark - so ist grün am hellsten, dann folgt rot und dann blau. Die Farben müssen darum unterschiedlich gewichtet werden.
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2

Vertex

BeitragDo, Jul 01, 2004 18:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Was TS meint:
RGB -> HSV -> Sättigung von HSV auf 0 -> RGB
mfg olli

TheShadow

Moderator

BeitragDo, Jul 01, 2004 19:01
Antworten mit Zitat
Benutzer-Profile anzeigen


eher sowas:
Y = 0,299*R + 0,587*G + 0,114*B

Nachzulesen unter
http://www.ralphaltmann.de/bil...09_048.pdf
"Liminanz"

oder ganz unten
http://vb-tec.de/rgb.htm
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2

Travis

BeitragDo, Jul 01, 2004 19:26
Antworten mit Zitat
Benutzer-Profile anzeigen
@Edlothiol
Da wäre ich jetzt nicht drauf gekommen, danke für den Tipp. Rolling Eyes

@TheShadow
Man kann's auch zu genau nehmen oder. Ich hab's jetzt mal direkt verglichen.

user posted image

Es gibt einen kleinen Unterschied zwischen dem Mittelwert und deiner Formel, aber das fällt doch kaum auf.
www.funforge.org

Ich hasse WASD-Steuerung.

Man kann alles sagen, man muss es nur vernünftig begründen können.

TheShadow

Moderator

BeitragDo, Jul 01, 2004 20:23
Antworten mit Zitat
Benutzer-Profile anzeigen
probier mal das Bild hier:
http://www.sasbachwalden.de/we...schaft.jpg

am besten noch verkleinern vorher...
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2

ChrisAttack

BeitragDo, Jul 01, 2004 20:35
Antworten mit Zitat
Benutzer-Profile anzeigen
und wie kann man farben verstärken???
B3D
MSVC++
DX9SDK

TheShadow

Moderator

BeitragDo, Jul 01, 2004 20:52
Antworten mit Zitat
Benutzer-Profile anzeigen
ich denke mal wenn man RGB->HSB konvertiert und sättigung angebt oder runtersenkt und dann wieder nach RGB konvertiert... Nur leider kann HSB weniger Farben speichern 360x100x100=3.600.000 vs. 16,7 Mio bei RGB
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2

Travis

BeitragDo, Jul 01, 2004 20:56
Antworten mit Zitat
Benutzer-Profile anzeigen
EDIT:

Farbotn(Bild, Rot, Grün, Blau) - Hier muss jeweils ein Faktor angegeben werden, mit dem der jeweilige Farbwert multipliziert wird.


Code: [AUSKLAPPEN]

Graphics 800,600,16,2

Bild = LoadImage("Landschaft.jpg")

Start = MilliSecs()
 Farbton(Bild, 1.2, .5, 1.2)
AppTitle MilliSecs()-Start + "ms"

DrawImage Bild,0,0
WaitKey


Function Farbton(Bild,fr#,fg#,fb#)

 LockBuffer ImageBuffer(Bild)

 For y = 0 To ImageHeight(Bild)
  For x = 0 To ImageWidth(Bild)
   rgb = ReadPixelFast(x,y,ImageBuffer(Bild))
   a=(rgb And $FF000000)/$1000000
   r=(rgb And $FF0000)/$10000
   g=(rgb And $FF00)/$100
   b=rgb And $FF

   r = r * fr
   If r > 255 Then r = 255
   If r < 0 Then r = 0

   g = g * fg
   If g > 255 Then g = 255
   If g < 0 Then g = 0

   b = b * fb
   If b > 255 Then b = 255
   If b < 0 Then b = 0

   rgb=a*$1000000 + r*$10000 + g*$100 + b
   WritePixelFast(x,y,rgb,ImageBuffer(Bild))
  Next
 Next

 UnlockBuffer ImageBuffer(Bild)

End Function
www.funforge.org

Ich hasse WASD-Steuerung.

Man kann alles sagen, man muss es nur vernünftig begründen können.
 

Dirk Knoop

BeitragFr, Jul 02, 2004 9:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

vielen Dank für eure Antworten.
Der Code von ChrisAttack klappt bei mir sehr gut.
Bei dem vom Travis wird bei mir leider nichts angezeigt.

Ich benötige diese Effekte für ein neues Programm.
Damit lassen sich Bilder einladen und mit coolen Rahmen versehen, um diese dann beispielsweise als Email versenden zu können.
Das ganze ist für normale User gedacht, die nicht mit Grafikprogrammen arbeiten.

Außerdem möchte ich noch ein paar Grafik-Effekte einbauen, wie beispielsweise ein Bild in Grautönen färben.

Was müste ich bei dem Code von ChrisAttack beispielsweise ändern, damit ein Bild in Gold-, Rot, Gelb- oder Grüntönen verwandelt wird ?

Auf jeden Fall schon einmal Danke für Eure Hilfe.

Gruß,

Dirk
www.kostenloser-fussballmanager.de
www.discaim.de - weil Spaß kein Zufall ist
www.torchance.de - ein etwas anderer Fußball-Manager

Travis

BeitragFr, Jul 02, 2004 13:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Das geht alles mit der Farbtonfunktion, die ich oben gepostet habe. Ich habe mich gestern mal wieder rangesetzt und ein paar einfache Bildeffekte zusammengestellt.

Wenn es jemanden interessiert, kann er es sich ja mal ansehen. Es sind ein paar Bilder enthalten und zu jedem Effekt ein Anwendungsbeispiel. Die einzelnen Effekte sind in Funktionen eingeteilt.

Im Angebot sind:

Graustufen - Wandelt das Bild in Graustufen um
Helligkeit - Ändert die Helligkeit
Mosaik - Ein Mosaikeffekt
Farbton - Intensität von Farbtönen ändern
Invertieren - Invertiert das Bild
Streuen - Verstreut die einzelnen Bildpunkte

Ihr müsst die Datei Samples.bb öffnen!!

http://home.t-online.de/home/D...ffekte.rar

Hier noch ein Beispiel was dabei herauskommt, wenn man einzelne Effekte kombiniert. Das ist eine Kombination aus Graustufenumwandlung, Farbton- und Helligkeitsänderung. Sieht jetzt so aus wie ein "Altes Foto".

user posted image
www.funforge.org

Ich hasse WASD-Steuerung.

Man kann alles sagen, man muss es nur vernünftig begründen können.
 

Dirk Knoop

BeitragFr, Jul 02, 2004 18:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Travis,

ich habe es eben ausprobiert. Sieht echt super aus !

Gruß,

Dirk
www.kostenloser-fussballmanager.de
www.discaim.de - weil Spaß kein Zufall ist
www.torchance.de - ein etwas anderer Fußball-Manager

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group