Seite 1 von 1
IncludeBinary statt mit festem String + variablen Dateinamen
Verfasst: 23.02.2016 19:57
von Heinz Mendax
Hallo !
Ich möchte das Programmbeispiel CatchImage_Example so
verändern, das immer unterschiedliche Bilder geladen werden
können. Ich hatte mir das so gedacht, dass mit FileName$ = OpenFileRequester("...
ein beliebiges Bild geladen werden kann und mit
Code: Alles auswählen
DataSection
Beispielbild:
IncludeBinary FileName$
EndDataSection
geladen werden könnte. Include verlangt aber feste Strings. Daraufhin hatte ich
die Idee
Code: Alles auswählen
DataSection
Beispielbild:
IncludeBinary "c:\temp\anaglyphe.bmp"
EndDataSection
einzugeben und das geladene File FileName$ in "c:\temp\anaglyphe.bmp" umzunennen.
Das Programm läuft auch ab,es wird aber immer die selbe Datei bearbeitet, scheinbar kommt
die Umnennung zu spät, obwohl sie am Anfang des Programmes steht.
welche Möglichkeit gibt es, IncludeBinary mit im Programm gewählten Dateien zu verbinden ?
__________________________________________________
Code-Tags hinzugefügt
23.02.2016
RSBasic
Re: IncludeBinary statt mit festem String + variablen Datein
Verfasst: 23.02.2016 20:37
von ts-soft
Es ist egal, wo das IncludeBinary im Code steht, es ist eine Compiler-Anweisung und wird unmittelbar beim Compilieren
und nicht während der Runtime ausgeführt. Da mußte Dir schon was anderes einfallen lassen
Gruß
Thomas
Re: IncludeBinary statt mit festem String + variablen Datein
Verfasst: 23.02.2016 21:00
von Heinz Mendax
Das hört sich so an, als gäb es nichts dagegen. Kann man vieleicht die Stellen im
Speicher,wo die Strings "c:\temp\anaglyphe.bmp" und FileName$ abgelegt sind
einfach austauschen oder ähnliches ?
Re: IncludeBinary statt mit festem String + variablen Datein
Verfasst: 23.02.2016 21:04
von Macros
Hallo Heinz,
CatchImage lädt Bilder aus dem Speicher, Mit IncludeBinary liegt das Bild mit deinem Programm im Speicher.
Nach dem Kompilieren änder sich dann nichts mehr am Bild.
Willst du verschiedene Bilder während der Laufzeit laden nimm
Loadimage.
Ein kleines Beispiel:
Code: Alles auswählen
; Das erlaubt uns auch PNG Bilder zu laden, Es gibt auch einen UseJPEGImageDecoder() und andere
UsePNGImageDecoder()
Pattern$ = "Bitmap oder PNG Dateien (*.bmp,*.png)|*.bmp;*.png|Alle Dateien (*.*)|*.*"
Pattern = 0 ; wir verwenden den ersten von zwei möglichen Pattern als Standard
File$ = OpenFileRequester("Bitte Bild zum Laden auswählen", StandardFile$, Pattern$, Pattern)
If File$=""
MessageRequester("Fehler","Keine Datei gewählt, beende")
End
EndIf
; Hier wird das Bild geladen
LoadImage(1, File$)
; Breite und Höhe abfragen um das Bild dann anzuzeigen.
w=ImageWidth(1)
; Vorsicht, das Fenster sollte nicht größer als der Bildschirm werden.
If w>800
w=800
EndIf
h=ImageHeight(1)
If h>600
h=600
EndIf
; Ein Fenster um das Bild anzuzeigen.
OpenWindow(1,0,0,w+10,h+10,"Bild",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
ImageGadget(1,5,5,w,h,ImageID(1))
; Die Eventschleife für das Fenster
Repeat
event=WaitWindowEvent()
Until event=#PB_Event_CloseWindow
Re: IncludeBinary statt mit festem String + variablen Datein
Verfasst: 23.02.2016 23:07
von Heinz Mendax
Hallo Macros !
Ich möchte das geladene Bild nicht anzeigen, sondern benötige die Farbinformationen
RGB jedes einzelnen Pixels, um Farbrechnungen zu machen. Nach den
Rechnungen sollen die veränderten Pixel wieder zum Bild gespeichert werden.
Ich hatte den Eindruck, das wenn das Bild bereits im Speicher ist, die Pixel und
deren Farben umso leichter zugänglich sind.
Re: IncludeBinary statt mit festem String + variablen Datein
Verfasst: 23.02.2016 23:25
von Macros
Nachdem du Load Image ausgeführt hast, ist das Bild auch im Speicher.
Hier noch ein Beispiel, wie du Pixel verändern kannst.
Code: Alles auswählen
; Das erlaubt uns auch PNG Bilder zu laden, Es gibt auch einen UseJPEGImageDecoder() und andere
UsePNGImageDecoder()
Pattern$ = "Bitmap oder PNG Dateien (*.bmp,*.png)|*.bmp;*.png|Alle Dateien (*.*)|*.*"
Pattern = 0 ; wir verwenden den ersten von zwei möglichen Pattern als Standard
File$ = OpenFileRequester("Bitte Bild zum Laden auswählen", StandardFile$, Pattern$, Pattern)
If File$=""
MessageRequester("Fehler","Keine Datei gewählt, beende")
End
EndIf
; Hier wird das Bild geladen
LoadImage(1, File$)
; Breite und Höhe des Bildes abfragen
w=ImageWidth(1)
h=ImageHeight(1)
; brauchen wir um auf den Bild zu Zeichnen, oder Farben abzufragen
StartDrawing(ImageOutput(1))
; gehe das Bild Pixel für Pixel durch
For x=0 To w-1
For y=0 To h-1
; Frage Farbe für den Pixel ab
color=Point(x,y)
; Invertiere die Farbe
color= ~color
; Male den Pixel (nun ivertiert) an die selbe Stelle
Plot(x,y,color)
Next
Next
StopDrawing()
; hier wird das Bild wieder angezeigt, es kann auch stattdessen per SaveImage(1,Dateiname$) gespeichert werden
; Vorsicht, das Fenster sollte nicht größer als der Bildschirm werden.
If w>800
w=800
EndIf
If h>600
h=600
EndIf
; Ein Fenster um das Bild anzuzeigen.
OpenWindow(1,0,0,w+10,h+10,"Bild",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
ImageGadget(1,5,5,w,h,ImageID(1))
; Die Eventschleife für das Fenster
Repeat
event=WaitWindowEvent()
Until event=#PB_Event_CloseWindow
Falls du noch weitere Hilfe brauchst, würde ich dir empfehlen erst mal alle Hilfeseiten von
2D Drawing und
Image durchzusehen. Mit Befehlen die du nicht brauchst, musst du dich ja nicht lang beschäftigen.
Dort findest du auch viele schöne Beispielcodes.
Re: IncludeBinary statt mit festem String + variablen Datein
Verfasst: 24.02.2016 00:03
von Heinz Mendax
Hallo Macro !
Vielen Dank für Deine Hilfe. Das Image- Verzeichnis des Codearchives habe ich durchgesehen. Ich hatte schon
eine Variante erstellt, die das Bild in DATA-Zeilen speichert. Das Laden dieses Programmes dauerte je nach
Bild unzusässig lange oder es mussten einige tausend Zeilen kompiliert werden, was nicht zum Ende kam.
Andere Beispiele waren so undurchsichtig bzw. nur in älteren oder neueren PB-Varianten lauffähig.
Das ist auch immer so ein Fall, wenn es plötzlich bestimmte Befehle nicht mehr gibt und man nicht weiß
wodurch man Sie ersetzen könnte. Das sind so die Stolpersteine.
mfG
Heinz
Re: IncludeBinary statt mit festem String + variablen Datein
Verfasst: 24.02.2016 01:11
von NicTheQuick
Du sollst nicht ins Codearchiv, sondern in die Hilfe gucken, indem du Purebasic startest und F1 drückst. Dort finden sich auch keine veralteten Befehle.
Re: IncludeBinary statt mit festem String + variablen Datein
Verfasst: 24.02.2016 11:03
von ts-soft
Heinz Mendax hat geschrieben:die das Bild in DATA-Zeilen speichert.
Das ist im Prinzip dasselbe wie IncludeBinary, lediglich das Bild muss beim Compilieren nicht mehr vorliegen und
der Source (nur der Source) wird länger. Bringt Dir also gar nichts.
Für Dein Vorhaben wäre also nur LoadImage(...) oder direktes parsen der Bilddatei eine Alternative.
Du musst immer dran denken, PB ist ein Compiler und kein Interpreter. Die arbeiten unterschiedlich!
Den Bildern ist es egal, wie sie in den Speicher gelangen, sie liegen immer im gleichem Format im Speicher vor.
Gruß
Thomas