OpenScreen, Sprite Problem

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
unix
Beiträge: 361
Registriert: 15.02.2005 19:25
Wohnort: Zwischen Coburg und Bamberg :-)
Kontaktdaten:

OpenScreen, Sprite Problem

Beitrag 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?
Hier steht normalerweise die Putzfrau drin,
die hat aber Urlaub.
MfG : Unix
Leo
Beiträge: 420
Registriert: 26.10.2004 18:26

Beitrag von Leo »

Nein, das geht nicht. Die Screen-Größe muss immer im 4:3 Verhältnis sein.
Benutzeravatar
unix
Beiträge: 361
Registriert: 15.02.2005 19:25
Wohnort: Zwischen Coburg und Bamberg :-)
Kontaktdaten:

Beitrag 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
Hier steht normalerweise die Putzfrau drin,
die hat aber Urlaub.
MfG : Unix
Benutzeravatar
unix
Beiträge: 361
Registriert: 15.02.2005 19:25
Wohnort: Zwischen Coburg und Bamberg :-)
Kontaktdaten:

Beitrag 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
Zuletzt geändert von unix am 19.07.2005 18:51, insgesamt 1-mal geändert.
Hier steht normalerweise die Putzfrau drin,
die hat aber Urlaub.
MfG : Unix
Benutzeravatar
MLK
Beiträge: 267
Registriert: 01.11.2004 13:17
Wohnort: Hamburg

Beitrag von MLK »

ein WindowedScreen() kann jegliche (machbare) größe annehmen.
Benutzeravatar
unix
Beiträge: 361
Registriert: 15.02.2005 19:25
Wohnort: Zwischen Coburg und Bamberg :-)
Kontaktdaten:

Beitrag von unix »

Ja aber ich will es auf den ganzen Bildschirm für spätere evekte
Hier steht normalerweise die Putzfrau drin,
die hat aber Urlaub.
MfG : Unix
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag 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:
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
Benutzeravatar
unix
Beiträge: 361
Registriert: 15.02.2005 19:25
Wohnort: Zwischen Coburg und Bamberg :-)
Kontaktdaten:

Beitrag 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
Hier steht normalerweise die Putzfrau drin,
die hat aber Urlaub.
MfG : Unix
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag 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.
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
Benutzeravatar
Zaphod
Beiträge: 2875
Registriert: 29.08.2004 00:40

Beitrag von Zaphod »

kein wunder, die leckere portion spagehetti kann er wahrscheinlich selbst nichtmehr lesen...
Antworten