Seite 1 von 1

Grafik Converter

Verfasst: 12.09.2004 13:25
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

Verfasst: 12.09.2004 13:32
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

So ganz hilft das doch nicht!

Verfasst: 12.09.2004 14:44
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??

Verfasst: 12.09.2004 14:53
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!

Verfasst: 12.09.2004 15:05
von sim0n
Nö, das funzt auch nicht!
Aber danke für die Hilfe!

Verfasst: 12.09.2004 16:41
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

Verfasst: 14.09.2004 21:20
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!! :?

Verfasst: 14.09.2004 21:25
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")

Verfasst: 15.09.2004 16:23
von rayman1970

Verfasst: 16.09.2004 20:42
von sim0n
Danke für die Links, rayman!
Haben mir echt weitergeholfen! :allright: