Image in Sprite umwandeln und umgekehrt
Verfasst: 19.10.2005 21:11
Gibt es eine schnelle Möglichkeit, ein Image in ein Sprite bzw. ein Sprite in ein image umzuwandeln? Bisher habe ich das immer mit Zwischenspeichern und neuladen gelöst 

Das deutsche PureBasic-Forum
https://www.purebasic.fr/german/
Code: Alles auswählen
Sprite.l=999
GrabSprite(Sprite.l,0,0,1024,768)
hDC=StartDrawing(SpriteOutput(Sprite.l))
bmp.BITMAP\bmWidth=SpriteWidth(Sprite.l)
bmp\bmHeight=SpriteHeight(Sprite.l)
bmp\bmPlanes=1
bmp\bmBitsPixel=GetDeviceCaps_(hDC,#BITSPIXEL)
bmp\bmBits=DrawingBuffer()
bmp\bmWidthBytes=DrawingBufferPitch()
hBmp.l=CreateBitmapIndirect_(bmp)
StopDrawing()
Code: Alles auswählen
;Thanks to SoS Deem2031 S.M. and Hroudtwolf
OnErrorResume()
Global ThreadID.l
Global sprite.b
sprite=1
If InitSprite()
sprite=1
Else
sprite=0
EndIf
Enumeration
#wisch
EndEnumeration
;- Gadget Constants
Global FontName.s
Global FontSize.b
FontName="Arial"
FontSize=6
FontStyle=#PB_Font_Bold
LoadFont(1,FontName,FontSize,FontStyle)
Enumeration
#start
#Image_1
#Image_2
#ProgressBar
#rec
#Text_1
#Text_2
#check
#save
#load
#state
#enableprogress
#verwisch
#mosaik
#groesse
#kant
#abort
#random
#ascii
#text
#font
#benpiccosoft
#undo
#print
EndEnumeration
Dim Bild.l(1,1)
Procedure scroll(window)
Protected text$
Protected merk$
Repeat
text$=GetWindowTitle(window)
merk$=Left(text$,1)
text$=Right(text$,Len(text$)-1)+merk$
Delay(100)
If SetWindowTitle(window,text$):EndIf
ForEver
EndProcedure
Procedure RedrawImage(Image)
UseImage(Image)
CreateSprite(1,ImageWidth(),ImageHeight())
StartDrawing(SpriteOutput(1))
*buffer=DrawingBuffer()
Height=SpriteHeight(1)
Width=SpriteWidth(1)
pitch= DrawingBufferPitch()
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
pixelformat= DrawingBufferPixelFormat()
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;Debug "sprite"
For y=1 To Height
;WindowEvent()
For x=1 To Width
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
Select pixelformat
Case #PB_PixelFormat_32Bits_BGR
rgb=Bild(x-1,y-1)
bgr=(((rgb & $FF) << 16)|(((rgb >>8 ) & $FF)<<8)|((rgb >>16) & $FF))
PokeL(*buffer+4*Z+z2,bgr)
Case #PB_PixelFormat_32Bits_RGB
PokeL(*buffer+4*Z+z2,Bild(x-1,y-1))
EndSelect
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
Z+1
Next
Z = 0
z2 + pitch
Next
StopDrawing()
hDC=StartDrawing(SpriteOutput(1))
bmp.BITMAP\bmWidth=Width
bmp\bmHeight=Height
bmp\bmPlanes=1
bmp\bmBitsPixel=GetDeviceCaps_(hDC,#BITSPIXEL)
bmp\bmBits=DrawingBuffer()
bmp\bmWidthBytes=DrawingBufferPitch()
hBmp.l=CreateBitmapIndirect_(bmp)
StopDrawing()
UseImage(Image)
StartDrawing(ImageOutput())
DrawImage(hBmp,0,0)
StopDrawing()
DeleteObject_(hBmp)
;CopyImage(hBmp,Image)
EndProcedure
Procedure sucsecc()
For x=1 To 3
beep_(100*x,100)
Next
beep_(1000,150)
beep_(750,50)
beep_(1250,75)
EndProcedure
Procedure shake(window)
CreateThread(@sucsecc(),0)
For x=1 To 5
MoveWindow(WindowX()+Random(4),WindowY()+Random(4))
Delay(100)
MoveWindow(WindowX()-Random(4),WindowY()-Random(4))
Delay(100)
Next
EndProcedure
Procedure.s html_hex(color.l)
red$= LSet(Hex(Red(color)),2,"0")
green$= LSet(Hex(Green(color)),2,"0")
blue$= LSet(Hex(Blue(color)),2,"0")
ProcedureReturn "#"+red$+green$+blue$
EndProcedure
Procedure ReloadImage(Image)
PauseThread(ThreadID)
If sprite=1
FlipBuffers()
UseImage(Image)
Dim Bild.l(ImageWidth(),ImageHeight())
If sprite=1
UseImage(Image)
CreateSprite(1,ImageWidth(),ImageHeight())
;SaveImage(Image,GetTempPath()+"\temp.bmp")
;LoadSprite(1,GetTempPath()+"\temp.bmp")
StartDrawing(SpriteOutput(1))
DrawImage(UseImage(Image),0,0)
*buffer=DrawingBuffer()
Height=SpriteHeight(1)
Width=SpriteWidth(1)
pitch= DrawingBufferPitch()
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
pixelformat= DrawingBufferPixelFormat()
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;Debug "sprite"
For y=1 To Height
;WindowEvent()
For x=1 To Width
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
Select pixelformat
Case #PB_PixelFormat_32Bits_BGR
bgr=PeekL(*buffer+4*Z+z2)
;PokeL(*buffer+4*Z+z2,bgr)
rgb=(((bgr & $FF) << 16)|(((bgr >>8 ) & $FF)<<8)|((bgr >>16) & $FF))
Bild(x-1,y-1)=rgb
Case #PB_PixelFormat_32Bits_RGB
Bild(x-1,y-1)=PeekL(*buffer+4*Z+z2)
EndSelect
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
Z+1
Next
Z = 0
z2 + pitch
Next
StopDrawing()
Else
StartDrawing(ImageOutput())
For y=1 To ImageHeight()
For x=1 To ImageWidth()
WindowEvent()
Bild(x,y)=Point(x,y)
Next
Next
StopDrawing()
EndIf
Else
UseImage(TargetIMG)
StartDrawing(ImageOutput())
For y=1 To ImageHeight()
For x=1 To ImageWidth()
Plot(x,y,Bild(x,y))
Next
Next
StopDrawing()
EndIf
ResumeThread(ThreadID)
EndProcedure
Procedure wisch(SourceIMG,TargetIMG,mode)
Protected count.l
UseImage(SourceIMG)
CreateImage(TargetIMG,ImageWidth(),ImageHeight())
Dim farbe.l(ImageWidth(),ImageHeight())
UseImage(TargetIMG)
If GetGadgetState(#enableprogress)=1
enableprogress=1
EndIf
;StartDrawing(ImageOutput())
For y=0 To ImageHeight()
For x=0 To ImageWidth()
If x-1>0 And x+1<ImageWidth() And y-1>0 And y+1 < ImageHeight()
red.f=(Red(Bild(x,y))+Red(Bild(x+1,y))+Red(Bild(x,y+1))+Red(Bild(x+1,y+1))+Red(Bild(x-1,y))+Red(Bild(x,y-1))+Red(Bild(x-1,y-1))+Red(Bild(x+1,y-1))+Red(Bild(x-1,y+1)))/9
green.f=(Green(Bild(x,y))+Green(Bild(x+1,y))+Green(Bild(x,y+1))+Green(Bild(x+1,y+1))+Green(Bild(x-1,y))+Green(Bild(x,y-1))+Green(Bild(x-1,y-1))+Green(Bild(x+1,y-1))+Green(Bild(x-1,y+1)))/9
blue.f=(Blue(Bild(x,y))+Blue(Bild(x+1,y))+Blue(Bild(x,y+1))+Blue(Bild(x+1,y+1))+Blue(Bild(x-1,y))+Blue(Bild(x,y-1))+Blue(Bild(x-1,y-1))+Blue(Bild(x+1,y-1))+Blue(Bild(x-1,y+1)))/9
If mode=1
If red>255
red=red-255
EndIf
If green>255
green=green-255
EndIf
If blue>255
blue=blue-255
EndIf
EndIf
Bild(x,y)=RGB(red,green,blue)
If enableprogress=1
count+1
progress.f=(count/(ImageHeight()*ImageWidth()))*100
SetGadgetState(#ProgressBar,progress)
EndIf
EndIf
Next
Next
RedrawImage(TargetIMG)
;StopDrawing()
If enableprogress=1
SetGadgetState(#ProgressBar,100)
EndIf
EndProcedure
Procedure mosaik(SourceIMG,TargetIMG,groesse,zw,mode)
If GetGadgetState(#enableprogress)=1
enableprogress=1
EndIf
Protected count.l
count=0
UseImage(SourceIMG)
CreateImage(TargetIMG,ImageWidth(),ImageHeight())
UseImage(TargetIMG)
Width=ImageWidth()
Height=ImageHeight()
;StartDrawing(ImageOutput())
For y=0 To ImageHeight() ;Step groesse
For x=0 To ImageWidth() ;Step groesse
If enableprogress=1
count+1
progress.f=(count/((ImageHeight()/10)*(ImageWidth()/10)))*100
SetGadgetState(#ProgressBar,progress)
EndIf
red.f=0
green.f=0
blue.f=0
For Z=0 To groesse
For q=0 To groesse
If x+q<ImageWidth() And y+Z<ImageHeight()
red.f=red+Red(Bild(x+q,y+Z))
green.f=green+Green(Bild(x+q,y+Z))
blue.f=blue+Blue(Bild(x+q,y+Z))
EndIf
Next
Next
red=red/Pow(groesse+1,2)
green=green/Pow(groesse+1,2)
blue=blue/Pow(groesse+1,2)
For a=0 To groesse+zw
For b=0 To groesse+zw
If x+b<Width And y+a<Height
Bild(x+b,y+a)=RGB(red,green,blue)
EndIf
Next
Next
If mode=1
farbe.l=RGB(red/1.5,green/1.5,blue/1.5)
Bild(x,y)=farbe
For Z=1 To groesse
If x+Z<Width And y+groesse<Height
Bild(x+Z,y)=farbe
Bild(x+Z,y+groesse)=RGB(Red(farbe)/Z,Green(farbe)/Z,Blue(farbe)/Z)
EndIf
Next
For Z=1 To groesse
If x+groesse<Width And y+Z<Height
Bild(x,y+Z)=farbe
Bild(x+groesse,y+Z)=RGB(Red(farbe)/Z,Green(farbe)/Z,Blue(farbe)/Z)
EndIf
Next
EndIf
x+groesse
Next
y+groesse
Next
RedrawImage(TargetIMG)
;StopDrawing()
EndProcedure
Procedure ran(SourceIMG,TargetIMG)
If GetGadgetState(#enableprogress)=1
enableprogress=1
EndIf
Protected count.l
count=0
UseImage(SourceIMG)
CreateImage(TargetIMG,ImageWidth(),ImageHeight())
UseImage(TargetIMG)
For y=0 To ImageHeight()
For x=0 To ImageWidth()
If enableprogress=1
count+1
progress.f=(count/((ImageHeight())*(ImageWidth())))*100
SetGadgetState(#ProgressBar,progress)
EndIf
Bild(x,y)=RGB(Random(Red(Bild(x,y))),Random(Green(Bild(x,y))),Random(Blue(Bild(x,y))))
Next
Next
RedrawImage(TargetIMG)
EndProcedure
Procedure ASCII_text(SourceIMG,TargetIMG,mode)
If GetGadgetState(#enableprogress)=1
enableprogress=1
EndIf
Protected count.l
count=0
UseImage(SourceIMG)
CreateImage(TargetIMG,ImageWidth(),ImageHeight())
UseImage(TargetIMG)
StartDrawing(ImageOutput())
DrawingMode(1)
DrawingFont(UseFont(1))
For y=0 To ImageHeight()
For x=0 To ImageWidth()
If enableprogress=1
count+1
progress.f=(count/((ImageHeight())*(ImageWidth())))*100
SetGadgetState(#ProgressBar,progress)
EndIf
red.f=0
green.f=0
blue.f=0
For Z=0 To FontSize-1
For q=0 To FontSize-1
If x+q<ImageWidth() And y+Z<ImageHeight()
red.f=red+Red(Bild(x+q,y+Z))
green.f=green+Green(Bild(x+q,y+Z))
blue.f=blue+Blue(Bild(x+q,y+Z))
EndIf
Next
Next
red=red/Pow(FontSize,2)
green=green/Pow(FontSize,2)
blue=blue/Pow(FontSize,2)
FrontColor(red,green,blue)
Locate(x,y)
If mode=0
new$=Chr((red+green+blue)/3)
DrawText(new$)
x+TextLength(new$)
ElseIf mode=1
new$=Chr(Random(25) + 65)
DrawText(new$)
x+TextLength(new$)
EndIf
Next
y+FontSize
Next
StopDrawing()
EndProcedure
Procedure Open_wisch()
If OpenWindow(#wisch, 284, 160, 580, 310, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered , " Farbmixer 1.4c ")
If CreateGadgetList(WindowID())
ButtonGadget(#start, 220, 280, 90, 25, "Start")
ImageGadget(#Image_1, 50, 40, 190, 140, LoadImage(0, ""), #PB_Image_Border)
ImageGadget(#Image_2, 250, 40, 190, 140, LoadImage(0, ""), #PB_Image_Border)
ProgressBarGadget(#ProgressBar, 160, 220, 210, 20, 0, 100, #PB_ProgressBar_Smooth)
TrackBarGadget(#rec, 90, 250, 300, 20, 1, 100, #PB_TrackBar_Ticks)
TextGadget(#Text_1, 10, 250, 80, 20, "Durchläufe: 1")
CheckBoxGadget(#check,10,210,130,15,"Keine Gitternetzlinien")
TextGadget(#state,150,200,200,15," ")
ButtonGadget(#load,400,250,100,20,"Laden")
ButtonGadget(#save,400,270,100,20,"Speichern")
CheckBoxGadget(#enableprogress,10,225,150,15,"Enable Progressbar")
OptionGadget(#verwisch,400,200,120,15,"Unschärfe generieren")
OptionGadget(#mosaik,400,215,100,15,"Mosaik erstellen")
OptionGadget(#random,400,230,100,15,"Zufallsmuster")
OptionGadget(#ascii,400,185,100,15,"ASCII-Text")
SpinGadget(#groesse,80,270,30,15,1,300)
TextGadget(#Text_2,10,270,70,15,"Mosaikgröße")
CheckBoxGadget(#kant,10,195,100,15,"Steinkanten")
CheckBoxGadget(#text,10,180,100,15,"Zufälliger Text")
ButtonGadget(#abort,320,283,80,20,"Abbrechen")
ButtonGadget(#font,110,180,100,17,"Schriftart wählen")
TextGadget(#benpiccosoft,600,300,300,15,Chr(169)+" 2005 BenpiccoSoft")
ButtonGadget(#undo,220,180,100,17,"Rückgängig")
ButtonGadget(#print,400,290,100,17,"Drucken")
SetGadgetState(#kant,1)
SetGadgetState(#check,1)
EndIf
OpenWindowedScreen(WindowID(#wisch),1000,1000,1,1,0,0,0)
EndIf
SetGadgetState(#verwisch,1)
DisableGadget(#kant,1)
DisableGadget(#check,1)
SetGadgetState(#groesse,10)
SetGadgetText(#groesse,Str(GetGadgetState(#groesse)))
DisableGadget(#groesse,1)
DisableGadget(#abort,1)
DisableGadget(#text,1)
DisableGadget(#font,1)
DisableGadget(#undo,1)
DisableGadget(#print,1)
EndProcedure
Open_wisch()
#gadgets=23
Dim abstX.w(#gadgets)
Dim abstY.w(#gadgets)
Dim GadgetOldWidth.w(#gadgets)
Dim GadgetOldHeight.w(#gadgets)
Dim typ.b(#gadgets)
UseWindow(#wisch)
For x=0 To #gadgets
abstX(x)=WindowWidth()-GadgetX(x)
abstY(x)=WindowHeight()-GadgetY(x)
GadgetOldWidth(x)=GadgetWidth(x)
GadgetOldHeight(x)=GadgetHeight(x)
typ(x)=4
Next
typ(#Image_1)=2
typ(#Image_2)=3
DisableGadget(#start,1)
DisableGadget(#save,1)
ThreadID=CreateThread(@scroll(),#wisch)
image$=ProgramParameter()
If image$
If GetExtensionPart(image$)="bmp" Or GetExtensionPart(image$)="jpg" Or GetExtensionPart(image$)="png" Or GetExtensionPart(image$)="tiff" Or GetExtensionPart(image$)="tga"
Goto load
Else
If MessageRequester("info","Achtung, das von ihnen gewählte Bildvormat wird nicht unterstützt! Es kann daher zu Fehlern kommen. Trotzdem laden?",#PB_Requester_MultiSelection)=1
Goto load
EndIf
EndIf
EndIf
image$="c:\"
Repeat
Delay(0)
If WindowHeight.f<>WindowHeight() Or WindowWidth.f<>WindowWidth()
For x=0 To #gadgets
If typ(x)=1
ResizeGadget(x,WindowWidth()-abstX(x),WindowHeight()-abstY(x),GadgetWidth(x),GadgetHeight(x))
ElseIf typ(x)=2
ResizeGadget(x,GadgetX(x),GadgetY(x),WindowWidth()-abstX(x)-GadgetX(x)+GadgetOldWidth(x),WindowHeight()-abstY(x)-GadgetY(x)+GadgetOldHeight(x))
ElseIf typ(x)=3
ResizeGadget(x,WindowWidth()-abstX(x),GadgetY(x),WindowWidth()-abstX(x)-GadgetWidth(x)+GadgetOldWidth(x),WindowHeight()-abstY(x)-GadgetY(x)+GadgetOldHeight(x))
ElseIf typ(x)=4
ResizeGadget(x,GadgetX(x),WindowHeight()-abstY(x),GadgetWidth(x),GadgetHeight(x))
ElseIf typ(x)=5
ResizeGadget(x,WindowWidth()-abstX(x),GadgetY(x),GadgetWidth(x),GadgetHeight(x))
EndIf
Next
If IsImage(2)
;Debug "Image existiert"
CopyImage(2,0)
ResizeImage(0,GadgetWidth(#Image_2),GadgetHeight(#Image_2))
SetGadgetState(#Image_2,UseImage(0))
LoadImage(10,image$)
ResizeImage(10,GadgetWidth(#Image_1),GadgetHeight(#Image_1))
SetGadgetState(#Image_1,UseImage(10))
EndIf
ResizeGadget(#Image_2,GadgetX(#Image_2),GadgetY(#Image_2),GadgetWidth(#Image_1),GadgetHeight(#Image_1))
EndIf
WindowWidth=WindowWidth()
WindowHeight=WindowHeight()
Event = WaitWindowEvent()
If Event = #PB_EventGadget
;Debug "WindowID: " + Str(EventWindowID())
GadgetID = EventGadgetID()
If GadgetID = #start
DisableGadget(#abort,0)
CopyImage(1,3)
DisableGadget(#undo,0)
For a=1 To GetGadgetState(#rec)
SetGadgetText(#state,"Durchlauf "+Str(a)+" von "+Str(GetGadgetState(#rec)))
If GetGadgetState(#mosaik)=1
mosaik(1,2,GetGadgetState(#groesse),GetGadgetState(#check),GetGadgetState(#kant))
ElseIf GetGadgetState(#verwisch)=1
wisch(1,2,0)
ElseIf GetGadgetState(#random)=1
ran(1,2)
ElseIf GetGadgetState(#ascii)=1
ASCII_text(1,2,GetGadgetState(#text))
EndIf
CopyImage(2,1)
CopyImage(2,0)
ResizeImage(0,GadgetWidth(#Image_1),GadgetHeight(#Image_1))
UseImage(0)
SetGadgetState(#Image_2,ImageID())
If WindowEvent() = #PB_EventGadget
If EventGadgetID() =#abort
SetGadgetText(#state,"Abgebrochen nach "+Str(a)+" Durchläufen")
Break
EndIf
EndIf
;If GetGadgetState(#rec)>1
SetGadgetText(#state,"Erneuere Bild")
ReloadImage(1)
;EndIf
Next
DisableGadget(#save,0)
If GetGadgetText(#state)<>"Abgebrochen nach "+Str(a)+" Durchläufen"
SetGadgetText(#state,"Fertig!")
shake(#wisch)
EndIf
DisableGadget(#abort,1)
ElseIf GadgetID =#load
image$=OpenFileRequester("Bild auswählen",GetPathPart(image$),"Grafik Files|*.bmp;*.jpg;*.png;*.tiff;*.tga|Bitmaps|*.bmp|JPEGs|*.jpg|TrueVision Targa|*.tga|Tiff|*.tiff",-1)
If image$
load:
UsePNGImageDecoder()
UseTGAImageDecoder()
UseTIFFImageDecoder()
UseJPEGImageDecoder()
SetGadgetText(#state,"Loading...")
DisableGadget(#start,0)
If LoadImage(1,image$)
CopyImage(1,0)
CopyImage(1,2)
ResizeImage(0,GadgetWidth(#Image_1),GadgetHeight(#Image_1))
UseImage(0)
SetGadgetState(#Image_1,ImageID())
ReloadImage(1)
SetGadgetText(#state,"Bereit")
DisableGadget(#save,0)
DisableGadget(#print,0)
Else
MessageRequester("error","Bild konnte nicht geladen werden")
SetGadgetText(#state,"Fehler beim laden von "+GetFilePart(image$))
EndIf
EndIf
EndIf
ElseIf GadgetID=#save
save$=SaveFileRequester("Speicherort auswählen","Mixbild","Bitmap|*.bmp |Jpeg|*.jpg|PortableNetworkGrafics|*.png|HTML-Seite|*.html;*.htm",0)
Select SelectedFilePattern()
Case 0
extend.s="bmp"
Case 1
extend="jpg"
Case 2
extend="png"
Case 3
extend="html"
EndSelect
If save$
SetGadgetText(#state,"Speichern...")
WindowEvent()
If GetExtensionPart(save$)=""
save$+"."+extend
EndIf
Select GetExtensionPart(save$)
Case "bmp"
SaveImage(2,save$,#PB_ImagePlugin_BMP)
Case "jpg"
UseJPEGImageEncoder()
SaveImage(2,save$,#PB_ImagePlugin_JPEG)
Case "png"
UsePNGImageEncoder()
SaveImage(2,save$,#PB_ImagePlugin_PNG)
Case "htm"
Goto html:
Case "html"
html:
UseImage(2)
filesize=(28*ImageWidth()*ImageHeight())/1024
If filesize>1000
MessageRequester("Warnung!","Achtung, die zu erzeugende html-seite wird über "+Str(filesize)+"kb groß sein, das würde bedeuten, das ein Modemnutzer sie in bestenfalls "+Str((filesize/(56/8))/60)+"min öffnen könnte.", #MB_OK|#MB_ICONWARNING)
EndIf
DeleteFile(save$)
OpenFile(1,save$)
WriteString("<html><head><title>"+GetFilePart(image$)+"</title></head><body><center><table cellspacing=0 cellpadding=0 Width="+Str(ImageWidth())+" Height="+Str(ImageHeight())+">")
For y=0 To ImageHeight()
WriteStringN("<tr>")
For x=0 To ImageWidth()
WindowEvent()
WriteStringN("<td bgcolor="+Chr(34)+html_hex(Bild(x,y))+Chr(34)+"></td>")
Next
WriteStringN("</tr>")
Next
WriteStringN("</table></center></body></html>")
CloseFile(1)
EndSelect
SetGadgetText(#state,"Gespeichert!")
RunProgram(save$)
EndIf
GadgetID=500
ElseIf GadgetID=#rec
SetGadgetText(#Text_1,"Durchläufe: "+Str(GetGadgetState(#rec)))
ElseIf GadgetID=#mosaik
SetGadgetState(#verwisch,0)
SetGadgetState(#rec,1)
SetGadgetText(#Text_1,"Durchläufe: "+Str(GetGadgetState(#rec)))
DisableGadget(#rec,1)
DisableGadget(#check,0)
DisableGadget(#groesse,0)
DisableGadget(#kant,0)
DisableGadget(#text,1)
DisableGadget(#font,1)
ElseIf GadgetID=#verwisch
SetGadgetState(#mosaik,0)
DisableGadget(#check,1)
DisableGadget(#rec,0)
DisableGadget(#groesse,1)
DisableGadget(#kant,1)
DisableGadget(#text,1)
DisableGadget(#font,1)
ElseIf GadgetID=#groesse
SetGadgetText(#groesse,Str(GetGadgetState(#groesse)))
ElseIf GadgetID=#random
SetGadgetState(#rec,1)
DisableGadget(#text,1)
DisableGadget(#check,1)
DisableGadget(#rec,1)
DisableGadget(#groesse,1)
DisableGadget(#kant,1)
DisableGadget(#font,1)
ElseIf GadgetID=#ascii
DisableGadget(#text,0)
DisableGadget(#check,1)
DisableGadget(#rec,1)
DisableGadget(#groesse,1)
DisableGadget(#kant,1)
DisableGadget(#font,0)
SetGadgetState(#rec,1)
SetGadgetText(#Text_1,"Durchläufe: "+Str(GetGadgetState(#rec)))
ElseIf GadgetID=#font
If FontRequester(FontName,FontSize,0)
FontName=SelectedFontName()
FontSize=SelectedFontSize()
FontStyle=SelectedFontStyle()
LoadFont(1,FontName,FontSize,FontStyle)
EndIf
GadgetID=500
ElseIf GadgetID=#print
SetGadgetText(#state,"Sende Bild an Drucker...")
If PrintRequester()
StartPrinting("Farbmix-"+image$)
StartDrawing(PrinterOutput())
;MessageRequester("Info","Breite:"+Str(PrinterPageWidth())+" Höhe:"+Str(PrinterPageHeight()))
DrawImage(UseImage(2),0,0,PrinterPageWidth(),(PrinterPageWidth()/ImageWidth())*ImageHeight())
StopDrawing()
StopPrinting()
SetGadgetText(#state,"Gedruckt!")
Else
SetGadgetText(#state,"Druckvorgang erfolglos")
EndIf
GadgetID=500
ElseIf GadgetID=#kant
SetGadgetState(#check,1)
ElseIf GadgetID=#undo
SetGadgetText(#state,"Bild zurücksetzen")
CopyImage(3,1)
ReloadImage(1)
CopyImage(1,2)
CopyImage(1,0)
ResizeImage(0,GadgetWidth(#Image_1),GadgetHeight(#Image_1))
SetGadgetState(#Image_2,UseImage(0))
SetGadgetText(#state,"Fertig")
DisableGadget(#undo,1)
GadgetID=500
EndIf
Until Event = #PB_EventCloseWindow
End