Frame Control (x32/x64) Mini Image Editor

Anwendungen, Tools, Userlibs und anderes nützliches.
Lambda
Beiträge: 526
Registriert: 16.06.2011 14:38

Frame Control (x32/x64) Mini Image Editor

Beitrag von Lambda »

Abend PBBFF´s, :D

Benötigte einen Image-Widget. (Mutli-Page) Das Frame Control kann mehrere Bilder verwalten/bearbeiten und diese bei Bedarf auch als "Frame" zu einem Speicherblock zusammenfügen. Ein Speicherblock kann auch direkt wieder eingesetzt werden. Gedacht ist dieses Steuerelement als Eigenschaftsfeld für die neue PropertyBox: "Dock".

Features
  • Bilddateien verwalten
  • Bearbeiten
  • Speichern/laden von Frames (mehrere Bilder)
  • Werkzeuge konfigurierbar
  • Regeln festlegen (max./min. Seiten/Größe)
  • Datei-Shema definieren
  • Auto-Zoom
  • Größenveränderung
  • Zuschneiden
  • Horizontal/vertikal spiegeln
  • Callback Werkzeuge (wird noch ausgeweitet)
Example
;======================================================================
; MCF: Frame
; File: Example.pb
;
; Date: June 6, 2013
; Version: 1.0
; Demo: Yes
; Target Compiler: PureBasic 5.1+
; Processor x32/x64
; Target OS: Windows, Linux*, MacOS**
;
; * Soon
; ** Planned
;
; Mini Image Editor Widget.
;======================================================================

;/ Reference
; Frame_Update(ID)
; Frame_Add(ID, Image = #Null)
; Frame_Create(ID, x, y, Width, Height, Pattern.s, *Theme, Attributes = #Null)
; #Frame_AutoSize - Auto Checkerboard-Size (not by default)
; #Frame_MultiPage - Multiple Pages
; #Frame_AddPage - Tool: Add Page
; #Frame_RemovePage - Tool: Remove Page
; #Frame_SavePage - Call: Save Page
; #Frame_LastPage - Tool: Last Page
; #Frame_NextPage - Tool: Next Page
; #Frame_Resize - Tool: Resize Page
; #Frame_Crop - Tool: Crop Page
; #Frame_FlipH - Tool: Flip Page horizontal
; #Frame_FlipV - Tool: Flip Page vertical

; Frame_Remove(ID, Index)
; Frame_Clear(ID)
; Frame_SetData(ID, *Data, Clear.b = #True)
; - Use a Frame of multiple Pages from Memory.

; Frame_GetData(ID)
; - Build a Frame of all Pages. Returns Memory Pointer.

; Frame_SetAttribute(ID, Attribute, Value)
; Frame_GetAttribute(ID, Attribute)
; Frame_GetPage(ID, Index)
; Frame_GetPageAdr(*Page)
; Frame_SetPage(ID, Index, Image)
; Frame_SetPageAdr(*Page, Image)
; Frame_SetPageName(ID, Index, Name.s)
; Frame_GetPageName(ID, Index)
; Frame_SetPageNameAdr(*Page, Name.s)
; Frame_GetPageNameAdr(*Page)
; Frame_Count(ID)
; Frame_ToolTip(ID, Tool, Tip.s)
; Frame_Callback(ID, *Callback)

IncludeFile "Frame.pbi"
;/ Example
Procedure FrameCallback(Class, Image, Name.s)
; Save Image
EndProcedure

UsePNGImageDecoder()
Global *Theme_Frame = Frame_ThemeDefault(?Frame_Toolset, 16)

OpenWindow(0, 0, 0, 200,100, "Frame Control", #PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_SizeGadget)


Frame_Create(0, 10, 10, 100, 80, "PNG (*.png)|*.png", *Theme_Frame, #Null)
Frame_Callback(0, @FrameCallback())

ButtonGadget(1, 10, 10, 80, 20, "Save Frame")
ButtonGadget(2, 100, 10, 80, 20, "Load Frame")


Define *Data, Path.s

Repeat
Select WaitWindowEvent()
Case #PB_Event_SizeWindow
ResizeGadget(0, 10, 40, WindowWidth(0)-20, WindowHeight(0)-50)
case #PB_Event_Gadget
Select EventGadget()
Case 1
*Data = Frame_GetData(0)

Path = SaveFileRequester("", "", "All *.*|*.*", 0)
If Path
CreateFile(0, Path)
WriteData(0, *Data, MemorySize(*Data))
CloseFile(0)

FreeMemory(*Data)
EndIf

Case 2
Path = OpenFileRequester("", "", "All *.*|*.*", 0)
If Path
*Data = AllocateMemory(FileSize(Path))
ReadFile(0, Path)
ReadData(0, *Data, MemorySize(*Data))
CloseFile(0)

Frame_SetData(0, *Data, #True)
EndIf
EndSelect


Case #PB_Event_CloseWindow
End
EndSelect
ForEver


DataSection
Frame_Toolset:
IncludeBinary "toolset.png"
EndDataSection