
Image in Sprite umwandeln und umgekehrt
Image in Sprite umwandeln und umgekehrt
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 

Johann Wolfgang von Geothe hat geschrieben:Wie dieses oder jenes Wort geschrieben wird, darauf kommt es doch eigentlich nicht an, sondern darauf, daß die Leser verstehen, was man damit sagen wollte.
mit StartDrawing() und DrawImage() kann man ein Image ganz leicht auf einem Sprite zeichnen ... gibt aber alleine hier im Forum einige schnellere lösungen ... musste nur mal nach "Sprite Image" suchen (dabei die Suche auf "alle Wörter suchen" stellen), dann wirst du schnell fündig.
Und für die andere variante wars schon schwerere ... aber gott sei dank bin ich im Englischen Forum fündig geworden, war glaub ich sogar von Freak die Prozedur. Such mal im Englischen Forum nach "Sprite Image" ... dann sollteste das ebenfals schnell finden.
MFG PMV
Und für die andere variante wars schon schwerere ... aber gott sei dank bin ich im Englischen Forum fündig geworden, war glaub ich sogar von Freak die Prozedur. Such mal im Englischen Forum nach "Sprite Image" ... dann sollteste das ebenfals schnell finden.
MFG PMV
- hardfalcon
- Beiträge: 3447
- Registriert: 29.08.2004 20:46
@hardfalcon
> Ich frag mich immer wieder, warum Image überhaupt gebraucht wird.
weil images ohne directx funktionieren.
alles hat so seine dasein berechtigung, Sprite 2D, Sprite3D & Images. für jede situation gibt es das passende und sollte auch nicht durch etwas anderes ersetzt/emuliert werden.
c ya,
nco2k
> Ich frag mich immer wieder, warum Image überhaupt gebraucht wird.
weil images ohne directx funktionieren.

alles hat so seine dasein berechtigung, Sprite 2D, Sprite3D & Images. für jede situation gibt es das passende und sollte auch nicht durch etwas anderes ersetzt/emuliert werden.
c ya,
nco2k
~|__/
..o.o.. <--- This is Einkaufswagen. Copy Einkaufswagen into your signature to help him on his way to world domination.
..o.o.. <--- This is Einkaufswagen. Copy Einkaufswagen into your signature to help him on his way to world domination.

Ich hab folgenden Code von Hroudtwolf gefunden:
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()
Danke
Johann Wolfgang von Geothe hat geschrieben:Wie dieses oder jenes Wort geschrieben wird, darauf kommt es doch eigentlich nicht an, sondern darauf, daß die Leser verstehen, was man damit sagen wollte.
Wenn du die PB ID meinst , nein . hBmp ist in dem Fall
das Handle des Bitmaps.
Hier ist das ganze nochmal mit Beispielen.
http://forums.purebasic.com/english/vie ... hp?p=81639
das Handle des Bitmaps.
Hier ist das ganze nochmal mit Beispielen.
http://forums.purebasic.com/english/vie ... hp?p=81639
Nein, ich meine schon das Ergebniss von ImageID(), also die handle ^^.
hab´s auch schon auspropiert, es funktioniert prächtig!
Wow, der beitrag im Englishen Forum beantwortet ja geanu, was ich gefragt habe
. Ok, in zukunft werde ich besser suchen...
hab´s auch schon auspropiert, es funktioniert prächtig!
Wow, der beitrag im Englishen Forum beantwortet ja geanu, was ich gefragt habe

Johann Wolfgang von Geothe hat geschrieben:Wie dieses oder jenes Wort geschrieben wird, darauf kommt es doch eigentlich nicht an, sondern darauf, daß die Leser verstehen, was man damit sagen wollte.
Ok, jetzt brauche ich ja doch noch die PB ID, da copyimage sicher schneller ist als startdrawing(imageoutput()): drawimage(hbmp,0,0):stopdrawing()
Oder gibt es eine Möglichkeit, den Code so zu ändern, das man hBMP vorher bestimmen kann?
Und wo ich schon mal frage, kennt jemand eine weitere Möglichkeit, diesen code zu optimieren? Es geht vor allem um die Prozeduren reloadImage() und RedrawImage(). Und nochetwas: Der Debugger meldet sich manchmal, das liegt am (eigentlich unnötigen
) scrollenden Fenstertitel. Seltsamerweise funktioniert ohne debugger alles...
Oder gibt es eine Möglichkeit, den Code so zu ändern, das man hBMP vorher bestimmen kann?
Und wo ich schon mal frage, kennt jemand eine weitere Möglichkeit, diesen code zu optimieren? Es geht vor allem um die Prozeduren reloadImage() und RedrawImage(). Und nochetwas: Der Debugger meldet sich manchmal, das liegt am (eigentlich unnötigen

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
Johann Wolfgang von Geothe hat geschrieben:Wie dieses oder jenes Wort geschrieben wird, darauf kommt es doch eigentlich nicht an, sondern darauf, daß die Leser verstehen, was man damit sagen wollte.