bild umfärben

Anfängerfragen zum Programmieren mit PureBasic.
delikanli_19_82
Beiträge: 173
Registriert: 30.11.2010 02:34

bild umfärben

Beitrag 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
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: bild umfärben

Beitrag 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 ...
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
rolaf
Beiträge: 3843
Registriert: 10.03.2005 14:01

Re: bild umfärben

Beitrag 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.
:::: WIN 10 :: PB 5.73 :: (x64) ::::
Benutzeravatar
CSHW89
Beiträge: 489
Registriert: 14.12.2008 12:22

Re: bild umfärben

Beitrag 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 ===---)
Bild Bild Bild
http://www.jasik.de - Windows Hilfe Seite
padawan hat geschrieben:Ich liebe diese von hinten über die Brust ins Auge Lösungen
Benutzeravatar
rolaf
Beiträge: 3843
Registriert: 10.03.2005 14:01

Re: bild umfärben

Beitrag 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...
:::: WIN 10 :: PB 5.73 :: (x64) ::::
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: bild umfärben

Beitrag 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 ^^
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
delikanli_19_82
Beiträge: 173
Registriert: 30.11.2010 02:34

Re: bild umfärben

Beitrag von delikanli_19_82 »

hallo leute,

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

viele dank.

mfg

kurt
Antworten