Grafik Converter

Für allgemeine Fragen zur Programmierung mit PureBasic.
sim0n
Beiträge: 131
Registriert: 12.09.2004 13:18
Kontaktdaten:

Grafik Converter

Beitrag von sim0n »

Schönen Guten Tag zusammen!

Ich möchte einen Grafik Converter schreiben, der alle Bilddateien aus einem Ordner ausließt, die Bildgröße auf 800x600 ändert und sie dann als JPEG speichert.

Das ist der Code, den ich bisher geschrieben habe:

Code: Alles auswählen

UseJPEGImageEncoder()
UseJPEGImageDecoder()
UseTIFFImageDecoder()
UseTGAImageDecoder()
UsePNGImageDecoder()



If OpenWindow(0, 0, 0, 300, 100, #PB_Window_SystemMenu, "JPEG-Converter ©2004 sim0n")
 
 If CreateGadgetList(WindowID(0))
  ButtonGadget(0, 0, 50, 300, 50, "Convert!")
  StringGadget(1, 25, 25, 250, 20, "")
  TextGadget(2, 25, 5, 50, 20, "Pfad:")
 EndIf
 
 path$ = GetGadgetText(1) 

 Repeat
  EventID.l = WaitWindowEvent()
  
  Select EventID
    Case #PB_Event_Gadget
      Select EventGadgetID()
        Case 0
          If path$
            ExamineDirectory(0, path$, "*.jpg;*.tga;*.tif;*.png;*.bmp")
          EndIf
          
          menge = 0
          filename$ = DirectoryEntryName()
          
          While NextDirectoryEntry()
            INC menge
          Wend
          
          For count = 0 To menge
            LoadImage(count, filename$)
            ResizeImage(count, 800, 600)
            SaveImage(count, "small" + filename$)
          Next count
      EndSelect 
  EndSelect
 Until EventID = #PB_Event_CloseWindow
EndIf
End

Kann mir vielleicht jemand wediterhelfen, denn ich bekomme beim Ausführen immer die Fehlermeldung, das bei ResizeImage(...) das
#Image Objekt nich initialisiert wurde
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag von remi_meier »

Teste immer den Rückgabewert von Loadimage!

Code: Alles auswählen

 If path$ 
            ExamineDirectory(0, path$, "*.jpg;*.tga;*.tif;*.png;*.bmp") 
          EndIf 
          
          menge = 0 
          filename$ = DirectoryEntryName() 
          
          While NextDirectoryEntry() 
            INC menge 
          Wend 
          
          For count = 0 To menge 
            LoadImage(count, filename$) 
            ResizeImage(count, 800, 600) 
            SaveImage(count, "small" + filename$) 
          Next count
Im Moment ist dieser Code wohl noch ziemlich unnütz, bevor du DirectoryEntryName() benutzt solltest du wohl noch NextDirectoryEntry() einmal aufgerufen haben...

greetz
remi
sim0n
Beiträge: 131
Registriert: 12.09.2004 13:18
Kontaktdaten:

So ganz hilft das doch nicht!

Beitrag von sim0n »

Hab den Code jetzt so erweitert:

Code: Alles auswählen

While NextDirectoryEntry()
            INC menge
            filename$ = DirectoryEntryName()
          Wend
          
          For count = 0 To menge
            If LoadImage(count, filename$)
              handle = ResizeImage(count, 800, 600)
              SaveImage(handle, "small" + filename$)
            EndIf
          Next count
Jetzt bekomme ich vom keine Fehlermeldung mehr, die Bilder werden allerdings auch nicht geändert!

Kann mir vielleicht jemand helfen??
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag von remi_meier »

Code: Alles auswählen

While NextDirectoryEntry() 
            INC menge 
            filename$ = DirectoryEntryName() 
            If LoadImage(menge, filename$) 
              ResizeImage(menge, 800, 600) 
              SaveImage(menge, "small" + filename$+".bmp") 
              Freeimage(menge)
            EndIf 
Wend
Vielleicht sowas, habs nicht getestet!
sim0n
Beiträge: 131
Registriert: 12.09.2004 13:18
Kontaktdaten:

Beitrag von sim0n »

Nö, das funzt auch nicht!
Aber danke für die Hilfe!
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag von remi_meier »

Code: Alles auswählen

UseJPEGImageEncoder() 
UseJPEGImageDecoder() 
UseTIFFImageDecoder() 
UseTGAImageDecoder() 
UsePNGImageDecoder() 



If OpenWindow(0, 0, 0, 300, 100, #PB_Window_SystemMenu, "JPEG-Converter ©2004 sim0n") 
  
  If CreateGadgetList(WindowID(0)) 
    ButtonGadget(0, 0, 50, 300, 50, "Convert!") 
    StringGadget(1, 25, 25, 250, 20, "C:\") 
    TextGadget(2, 25, 5, 50, 20, "Pfad:") 
  EndIf 
  
  
  
  Repeat 
    EventID.l = WaitWindowEvent() 
    
    Select EventID 
      Case #PB_Event_Gadget 
        Select EventGadgetID() 
          Case 0 
            path$ = GetGadgetText(1) 
            If path$ 
              If ExamineDirectory(0, path$, "*.jpg;*.tga;*.tif;*.png;*.bmp") 
                CreateDirectory(path$+"\resized")
              EndIf
            EndIf 
            
            menge = 0 
            
            
            While NextDirectoryEntry() 
              menge+1
              filename$ = DirectoryEntryName() 
              
              If LoadImage(count,path$+"\"+filename$)
                ResizeImage(count,800,600)
                SaveImage(count,path$+"\resized\small"+filename$+".bmp")
                FreeImage(count)
              EndIf
            Wend
             
        EndSelect 
    EndSelect 
  Until EventID = #PB_Event_CloseWindow 
EndIf 
End
Dieser Code funktioniert aus einem Grund nicht:
ExamineDirectory(0, path$, "*.jpg;*.tga;*.tif;*.png;*.bmp")
Wieso? Es geht nur, wenn ich z.B.
ExamineDirectory(0, path$, "*.bmp")
schreibe. Kann man da nicht mehrere Endungen angeben??? Oder steh ich grad aufm Schlauch??

Tja weiter kann ich dir auch nicht helfen...
cu
remi
sim0n
Beiträge: 131
Registriert: 12.09.2004 13:18
Kontaktdaten:

Beitrag von sim0n »

Danke, jetzt klappts!
Aber wenn ich bei SaveImage(...) ein ImagePlugin angebe, statt den Datentypen an den Dateinamen anzuhängen, dann wird das Bild zwar in der Größe geändert, aber der Typ bleibt gleich!
Irgendwie komisch!! :?
sim0n
Beiträge: 131
Registriert: 12.09.2004 13:18
Kontaktdaten:

Beitrag von sim0n »

Häng den Datentypen doch einfach an den Dateinamen an
Hab das Problem der doppelten Dateiendung so gelöst:

Code: Alles auswählen

SaveImage(menge, path$ + "\converted\small_" + Trim(ReplaceString(filename$, "*.png", " ")) + ".jpg")
Benutzeravatar
rayman1970
Beiträge: 89
Registriert: 01.09.2004 16:10
Wohnort: Troisdorf bei Bonn
Kontaktdaten:

Beitrag von rayman1970 »

sim0n
Beiträge: 131
Registriert: 12.09.2004 13:18
Kontaktdaten:

Beitrag von sim0n »

Danke für die Links, rayman!
Haben mir echt weitergeholfen! :allright:
Antworten