Platforms to show: All Mac Windows Linux Cross-Platform

/GraphicsMagick/GraphicsMagick/GraphicsMagick threaded convert


Required plugins for this example: MBS GraphicsMagick Plugin

You find this example project in your Plugins Download as a Xojo project file within the examples folder: /GraphicsMagick/GraphicsMagick/GraphicsMagick threaded convert

This example is the version from Wed, 31th Oct 2023.

Project "GraphicsMagick threaded convert.xojo_binary_project"
Class App Inherits Application
Const kEditClear = "&Delete"
Const kFileQuit = "&Quit"
Const kFileQuitShortcut = ""
End Class
Class MainWindow Inherits Window
Control List Inherits Listbox
ControlInstance List Inherits Listbox
EventHandler Function CellTextPaint(g As Graphics, row As Integer, column As Integer, x as Integer, y as Integer) As Boolean if column = 0 then dim Pic as picture = me.CellTag(row, column) if pic <> nil then dim faktor as Double = min( g.Height / Pic.Height, g.Width / Pic.Width) // Calculate new size dim w as Integer = Pic.Width * faktor dim h as Integer = Pic.Height * faktor dim xx as integer = (g.Width - w) / 2 dim yy as integer = (g.Height - h) / 2 g.DrawPicture Pic, xx, yy, w, h, 0, 0, pic.Width, pic.Height end if end if End EventHandler
End Control
Control EndTimer Inherits Timer
ControlInstance EndTimer Inherits Timer
EventHandler Sub Action() // have newer images? for i as integer = list.ListCount to thread.Images.Ubound dim file as folderitem = thread.files(i) dim image as GMImageMBS = thread.Images(i) dim pic as Picture = image.copyPicture List.AddRow " ", file.DisplayName+EndOfLine+str(file.Length/1024,"0")+" KB" list.CellTag(List.LastIndex, 0) = pic next if thread.done then MsgBox "Done after "+str( (thread.EndTime-thread.StartTime) / 1000000.0, "0.0")+" seconds." me.Mode = timer.ModeOff thread = nil end if End EventHandler
End Control
EventHandler Sub Open() dim f as FolderItem = GetFolderItem("Test Files") if not f.Exists then break // no test files? return end if thread = new MyThread thread.folder = f thread.run End EventHandler
Property thread As MyThread
End Class
MenuBar MainMenuBar
MenuItem FileMenu = "&File"
MenuItem FileQuit = "#App.kFileQuit"
MenuItem EditMenu = "&Edit"
MenuItem EditUndo = "&Undo"
MenuItem EditSeparator1 = "-"
MenuItem EditCut = "Cu&t"
MenuItem EditCopy = "&Copy"
MenuItem EditPaste = "&Paste"
MenuItem EditClear = "#App.kEditClear"
MenuItem EditSeparator2 = "-"
MenuItem EditSelectAll = "Select &All"
End MenuBar
Class MyThread Inherits Thread
EventHandler Sub Run() dim c as integer = folder.count dim filesTodo() as FolderItem for i as integer = 1 to c dim file as FolderItem = folder.TrueItem(i) if file <> nil and file.Visible then // skip jpeg? 'if file.Name.Right(4) = ".jpg" then continue filesTodo.Append file end if next StartTime = Microseconds for each file as FolderItem in filesTodo dim converter as new GMConvertMBS converter.InputFile = file dim ScaleGeometry as new GMGeometryMBS(512,512) ScaleGeometry.aspect = false // keep aspect ScaleGeometry.greater = true // Resize if image is greater than size (>) // Thumbnail scale is faster, but normal scale is better quality 'converter.ThumbnailGeometry = ScaleGeometry converter.ScaleGeometry = ScaleGeometry converter.Trim = true converter.AutoOrient = true converter.Strip = true // remove metadata converter.OutputMagick = "jpeg" converter.OutputFile = folder.Child(file.Name+".jpg") converter.Quality = 90 // JPEG quality converter.run if converter.OutputImage <> nil then self.images.Append converter.OutputImage self.files.append file end if next EndTime = Microseconds done = true End EventHandler
Property EndTime As Double
Property Images() As GMImageMBS
Property StartTime As Double
Property done As Boolean
Property files() As FolderItem
Property folder As FolderItem
End Class
End Project

The items on this page are in the following plugins: MBS GraphicsMagick Plugin.


The biggest plugin in space...