Platforms to show: All Mac Windows Linux Cross-Platform
/MacCG/CGImageSource/CGImageSource Thumbnails Threaded
Required plugins for this example: MBS MacCG Plugin, MBS MacCF Plugin
You find this example project in your Plugins Download as a Xojo project file within the examples folder: /MacCG/CGImageSource/CGImageSource Thumbnails Threaded
This example is the version from Sat, 8th Feb 2019.
Project "CGImageSource Thumbnails Threaded.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 Timer1 Inherits Timer
ControlInstance Timer1 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 CGImageMBS = thread.Images(i)
dim pic as Picture = image.Picture
List.AddRow " ", file.DisplayName+EndOfLine+str(file.Length/1024,"0")+" KB"
list.Celltag(List.LastIndex, 0) = pic
next
if thread.done then
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 options as new Dictionary
options.Value(CGImageSourceMBS.kCGImageSourceThumbnailMaxPixelSize) = 100
options.Value(CGImageSourceMBS.kCGImageSourceCreateThumbnailFromImageIfAbsent) = true
for i as integer = 1 to c
dim file as FolderItem = folder.TrueItem(i)
if file <> nil and file.Visible then
dim image as CGImageMBS = CGImageSourceMBS.CreateThumbnailMT(file, 0, options)
if image <> nil then
images.Append image
files.append file
end if
end if
next
done = true
End EventHandler
Property Images() As CGImageMBS
Property done As Boolean
Property files() As FolderItem
Property folder As FolderItem
End Class
End Project
See also:
The items on this page are in the following plugins: MBS MacCG Plugin.