Seite 1 von 2

OpenScreen, Sprite Problem

Verfasst: 19.07.2005 18:12
von unix
Eine Frage,
kann man ein Screen öffnen bzw. ändern das ein geladens Sprite genau in den Bildschirm passt?
Ohne ASM!

So ähnlich:

OpenScreen(SpriteWidth(#BalBla), SpriteHeight(#BlaBla), 32, "BlaBla")

Kann mir da jemand helfen?

Verfasst: 19.07.2005 18:18
von Leo
Nein, das geht nicht. Die Screen-Größe muss immer im 4:3 Verhältnis sein.

Verfasst: 19.07.2005 18:26
von unix
OK ich habe meine Lösung in Image gefunden:

ResizeImage(#Image, Breite, Höhe)

ist zwar kein Sprite aber für meine Zwecke reichts

und auserdem kann man ein Image in ein Sprite umwandeln:-)

trotzdem danke für alles

Verfasst: 19.07.2005 18:45
von unix
Ich ahbe jetzt eine Lösung

Nur mit den problem es ist extrem lahm

*zzz*

Weiß jemand wi es schneller geht?

Code:

LoadImage(0, File$)
UseImage(0)
ResizeImage(0, 800, 600)

OpenScreen(800,600,32,"V1")

CreateSprite(0,800,600)

For x=0 To 800
For y=0 To 600
StartDrawing(ImageOutput())
Color = Point(x, y)
StopDrawing()
StartDrawing(SpriteOutput(0))
Plot(x,y,Color)
StopDrawing()
Next
Next



[EDIT]
evtl. mit Memory
aber da habe ich keine Ahnung von

Verfasst: 19.07.2005 18:47
von MLK
ein WindowedScreen() kann jegliche (machbare) größe annehmen.

Verfasst: 19.07.2005 18:52
von unix
Ja aber ich will es auf den ganzen Bildschirm für spätere evekte

Verfasst: 19.07.2005 19:53
von Batze
Du kannst doch das Bild auch direkt auf den Bildschirm zeichnen:

Code: Alles auswählen

LoadImage(0, File$)
OpenScreen(800,600,32,"V1")
 StartDrawing(ScreenOutput())
DrawImage(0,0,800,600)
StopDrawing()
Oder wenn du lieber Sprites benutzt:

Code: Alles auswählen

LoadImage(0, File$)
OpenScreen(800,600,32,"V1")
createSprite(0,800,600)
 StartDrawing(SpriteOutput(0))
DrawImage(0,0,800,600)
StopDrawing()
Achja, benutz bitte Codetags! :roll:

Verfasst: 19.07.2005 22:17
von unix
Eure vorschläge sind gut aber so fuct es nicht!

Schaut
meun prog ist fertig:


InitSprite()
InitKeyboard()

Global rr.w
Global gg.w
Global bb.w

UseJPEGImageDecoder()
UsePNGImageDecoder()
UseTGAImageDecoder()
UseTIFFImageDecoder()
UseJPEGImageEncoder()
UsePNGImageEncoder()

Gosub Voreinstellung

StandardFile$ = ""
Pattern$ = "Bitmaps (*.bmp)|*.bmp|Portable Network Graphic (*.png)|*.png|Join Picture Expert Group (*.jpeg)|*.jpeg|Targa (*.tga)|*.tga|Tiff (*.tiff)|*.tiff"
Pattern = 0
File$ = OpenFileRequester("Bitte Datei zum Laden auswählen", StandardFile$, Pattern$, Pattern)

LoadImage(0,File$)
UseImage(0)
ResizeImage(0, 800, 600)

OpenScreen(800,600,32,"V1")

CreateSprite(0,800,600)

For y=0 To 600
For x=0 To 800

UseImage(0)
StartDrawing(ImageOutput())
color = Point(x, y)
If mm$ = "Normal" : Gosub Normal
ElseIf mm$ = "SW" : Gosub SW
ElseIf mm$ = "Grau" : Gosub Grau
ElseIf mm$ = "Farbe" : Gosub Farbe
ElseIf mm$ = "Um" : Gosub Um : EndIf
Plot(x,y,color)
StopDrawing()
StartDrawing(SpriteOutput(0))
Plot(x,y,color)
StopDrawing()

Next
Next

Repeat

ClearScreen(0,0,0)

ExamineKeyboard()


DisplaySprite(0,0,0)

FlipBuffers()

Until KeyboardPushed(#PB_Key_Escape)
CloseScreen()
Result = MessageRequester("Speicher","Wollen Sie das Bild Speichern?",#PB_MessageRequester_YesNo)
If Result = 6
Gosub Speichern
Else
End
EndIf


Voreinstellung:

OpenWindow(0,0,0,250,380,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"Modus-einstellung") And CreateGadgetList(WindowID(0))

OptionGadget(0, 30, 20, 120, 20, "Normal")
OptionGadget(1, 30, 45, 120, 20, "Schwarz-Weiß")
OptionGadget(2, 30, 70, 120, 20, "Graustufen")
OptionGadget(3, 30, 95, 120, 20, "Farbe")
OptionGadget(4, 30, 120, 120, 20, "Farben umkehren")

SetGadgetState(0,1) ; wir setzen die zweite Option als aktiv

TextGadget (101, 30, 150, 250, 20, "Rot: "+"0"+"%")
ScrollBarGadget(102, 30, 170, 190, 20, 0, 109, 10)
SetGadgetState (102, 0)

TextGadget (111, 30, 210, 250, 20, "Grün: "+"0"+"%")
ScrollBarGadget(112, 30, 230, 190, 20, 0, 109, 10)
SetGadgetState (112, 0)

TextGadget (121, 30, 270, 250, 20, "Blau: "+"0"+"%")
ScrollBarGadget(122, 30, 290, 190, 20, 0, 109, 10)
SetGadgetState (122, 0)

ButtonGadget(999, 75, 330, 100, 30, "Übernehmen")


Repeat

If GetGadgetState(3) = 0

DisableGadget(101, 1)
DisableGadget(102, 1)
DisableGadget(111, 1)
DisableGadget(112, 1)
DisableGadget(121, 1)
DisableGadget(122, 1)

Else

DisableGadget(101, 0)
DisableGadget(102, 0)
DisableGadget(111, 0)
DisableGadget(112, 0)
DisableGadget(121, 0)
DisableGadget(122, 0)

EndIf

SetGadgetText(101, "Rot: "+Str(GetGadgetState(102))+"%")
SetGadgetText(111, "Grün:"+Str(GetGadgetState(112))+"%")
SetGadgetText(121, "Blau:"+Str(GetGadgetState(122))+"%")

EventID = WaitWindowEvent()


If EventID = #PB_Event_CloseWindow
End
EndIf

If GetGadgetState(0) = 1 : mm$ = "Normal"
ElseIf GetGadgetState(1) = 1 : mm$ = "SW"
ElseIf GetGadgetState(2) = 1 : mm$ = "Grau"
ElseIf GetGadgetState(3) = 1 : mm$ = "Farbe"
ElseIf GetGadgetState(4) = 1 : mm$ = "Um" : EndIf

rr = GetGadgetState(102)
gg = GetGadgetState(112)
bb = GetGadgetState(122)

Until EventGadgetID() = 999
CloseWindow(0)


Return



Normal:
Return

SW:
R = Red(color)
G = Green(color)
B = Blue(color)

colorsw = (R + G + B) / 3
If colorsw > 128
color = $FFFFFF
ElseIf colorsw =< 128
color = $000000
EndIf
Return

Grau:
R = Red(color)
G = Green(color)
B = Blue(color)

colorg = (R + G + B) / 3
color = RGB(colorg,colorg,colorg)
Return

Farbe:
R = Red(color)
G = Green(color)
B = Blue(color)

R = R * rr / 100
G = G * gg / 100
B = B * bb / 100

color = RGB(R,G,B)
Return

Um:
Rf.f = Red(color)
Gf.f = Green(color)
Bf.f = Blue(color)

R = Abs(Rf.f - 255)
G = Abs(Gf.f - 255)
B = Abs(Bf.f - 255)

color = RGB(R,G,B)
Return


Speichern:

newsave:

StandardFile$ = ""
Pattern$ = "Bitmaps (*.bmp)|*.bmp|Portable Network Graphic (*.png)|*.png|Join Picture Expert Group (*.jpeg)|*.jpeg"
Pattern = 0
file$ = SaveFileRequester("Bild Speichern", Standardfile$, Pattern$, Pattern)
Endung$ = GetExtensionPart(file$)

If Endung$ = "bmp" Or Endung$ = "png" Or Endung$ = "jpeg"
If Endung$ = "bmp" : SaveImage(0, file$ ,#PB_ImagePlugin_BMP,10)
ElseIf Endung$ = "png" : SaveImage(0, file$ ,#PB_ImagePlugin_PNG,10)
ElseIf Endung$ = "jpeg" : SaveImage(0, file$ ,#PB_ImagePlugin_JPEG,10) : EndIf
End
Else
MessageRequester("ACHTUNG","Endung angeben") : Goto newsave
EndIf

Return




OKOK das Sprite hätte ich weglassen können nur leider habe ich eure Mails erst jetzt gelesen

sorry wegen der formatierung Iexpl. spinnt

und nein, ich weis nicht wo ich den code sost hinfrachten sollte

Verfasst: 19.07.2005 22:37
von Batze
Urgg.... :shock:
Der Text ist aber nciht sehr leserlich.
Vielleicht solltest du einiges doch mit Prozeduren machen.
So ist das nicht so leicht zu lesen. Das Viele Gosub stört doch ziemlich. :wink:

Warnung: Nicht starten, es stürzt ab.
@Unix: du hast die Zeichenschleife von 0-800 gemacht, das 800 ist aber schon über den Rand und führt zu einem Fehler.

Verfasst: 19.07.2005 23:06
von Zaphod
kein wunder, die leckere portion spagehetti kann er wahrscheinlich selbst nichtmehr lesen...