Seite 1 von 1

bild umfärben

Verfasst: 17.03.2011 00:47
von delikanli_19_82
hallo leute,

mal eine frage, dies mal nur unter windows. wäre auch für eine universelle lösung dankbar.

ich brauche eine möglichkeit, womit ich ein png oder jpeg bild, das ich in das programm hineinlade umfärben kann. das heißt, dessen farben manipulieren kann.

schließlich wird das bild als eine neue datei abgespeichert.

mfg

kurt

Re: bild umfärben

Verfasst: 17.03.2011 01:46
von STARGÅTE
Einfach das Bild als Image laden,
alle Pixel abfahren, auslesen, manipulieren und schreiben.

Code: Alles auswählen

For y = 0 To Height-1
  For x = 0 to Width-1
    Color = Point(x,y)
    Color = Manipulation(Color)
    Plot(x,y, Color)
  Next
Next
Manipulation() ist dann irgendeine Procedure, welche die Farbe ändert ...

Re: bild umfärben

Verfasst: 17.03.2011 12:58
von rolaf
STARGÅTE hat geschrieben:Einfach das Bild als Image laden,
alle Pixel abfahren, auslesen, manipulieren und schreiben.

Code: Alles auswählen

For y = 0 To Height-1
  For x = 0 to Width-1
    Color = Point(x,y)
    Color = Manipulation(Color)
    Plot(x,y, Color)
  Next
Next
Manipulation() ist dann irgendeine Procedure, welche die Farbe ändert ...
Wobei Point() und Plot() jeweils ein eigenes StartDrawing() + StopDrawing() benötigen. Es braucht also noch ein Array zum Zwischenspeichern der Farbdaten.

Re: bild umfärben

Verfasst: 17.03.2011 14:09
von CSHW89
DrFalo hat geschrieben:
STARGÅTE hat geschrieben:Einfach das Bild als Image laden,
alle Pixel abfahren, auslesen, manipulieren und schreiben.

Code: Alles auswählen

For y = 0 To Height-1
  For x = 0 to Width-1
    Color = Point(x,y)
    Color = Manipulation(Color)
    Plot(x,y, Color)
  Next
Next
Manipulation() ist dann irgendeine Procedure, welche die Farbe ändert ...
Wobei Point() und Plot() jeweils ein eigenes StartDrawing() + StopDrawing() benötigen. Es braucht also noch ein Array zum Zwischenspeichern der Farbdaten.
Hm??? Geht doch beides in einem:

Code: Alles auswählen

LoadImage(1, ---=== hier Name einfügen ===---)
If StartDrawing(ImageOutput(1))
  Width  = ImageWidth (1)
  Height = ImageHeight(1)
  For y = 0 To Height-1
    For x = 0 to Width-1
      Color = Point(x,y)
      Color = Manipulation(Color)
      Plot(x,y, Color)
    Next
  Next
  StopDrawing()
EndIf
SaveImage(1, ---=== hier Name einfügen ===---)

Re: bild umfärben

Verfasst: 17.03.2011 14:29
von rolaf
CSHW89 hat geschrieben:Hm??? Geht doch beides in einem:

Code: Alles auswählen

LoadImage(1, ---=== hier Name einfügen ===---)
If StartDrawing(ImageOutput(1))
  Width  = ImageWidth (1)
  Height = ImageHeight(1)
  For y = 0 To Height-1
    For x = 0 to Width-1
      Color = Point(x,y)
      Color = Manipulation(Color)
      Plot(x,y, Color)
    Next
  Next
  StopDrawing()
EndIf
SaveImage(1, ---=== hier Name einfügen ===---)
Theorie <> Praxis :wink:
Probier es real aus und ändere auch tatsächlich die Farben, dann siehst du es...

Re: bild umfärben

Verfasst: 17.03.2011 14:53
von STARGÅTE
Eigentlich gibt es ja noch ein etwas anderen Weg:

Code: Alles auswählen

Enumeration
  #SourceImage
  #DestinationImage
EndEnumeration


InitNetwork()
UsePNGImageDecoder()
 

ReceiveHTTPFile("http://data.unionbytes.de/UnionBytesIcon.png", GetTemporaryDirectory()+"UnionBytesIcon.png")
LoadImage(#SourceImage, GetTemporaryDirectory()+"UnionBytesIcon.png")
CreateImage(#DestinationImage, ImageWidth(#SourceImage), ImageHeight(#SourceImage), 32|#PB_Image_Transparent)

Debug "Downloaded"

Procedure ColorRotation(x, y, Color, Color2)
  ProcedureReturn RGBA(Green(Color), Blue(Color), Red(Color), Alpha(Color))
EndProcedure

Time = ElapsedMilliseconds()
StartDrawing(ImageOutput(#DestinationImage))
  DrawingMode(#PB_2DDrawing_CustomFilter)
  CustomFilterCallback(@ColorRotation())
  DrawImage(ImageID(#SourceImage), 0, 0)
StopDrawing()

Debug "Drawing"


Title$ = "Beispiel in "+Str(ElapsedMilliseconds()-Time)+"ms"

OpenWindow(#PB_Any, 0, 0, ImageWidth(#SourceImage)*2, ImageHeight(#SourceImage), Title$, #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
  ImageGadget(#PB_Any, 0, 0, 0, 0, ImageID(#SourceImage))
  ImageGadget(#PB_Any, ImageWidth(#SourceImage), 0, 0, 0, ImageID(#DestinationImage))

Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
Also CustomFilterCallback()

Ich habe n Zeitmessung mit eingebaut, damit ihr nicht denkt das der CustomFilterCallback so lange braucht, sonden der Download^^

Auf jedenfall ist das ein einfaches Beispiel einer Farbrotation in unserem Union Bytes Logo ^^

Re: bild umfärben

Verfasst: 18.03.2011 18:15
von delikanli_19_82
hallo leute,

danke für die beispiele. ich werde mich damit auseinander setzen.

viele dank.

mfg

kurt