Aktuelle Zeit: 15.11.2018 20:36

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 17 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Autor Nachricht
 Betreff des Beitrags: Re: Sprite als tga speichern
BeitragVerfasst: 19.06.2018 13:35 
Offline

Registriert: 23.06.2013 06:26
Beim Downgrade auf eine PB-Version mit DX7 Subsystem oder früher (5.0) gibt es dafür sogar einen Befehl.
SetSpriteOutput, oder so, damit konnte man Sprites auf Speites zeichnen. :3

_________________
Wer braucht schon Unicode? PB5.24LTS


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Sprite als tga speichern
BeitragVerfasst: 19.06.2018 14:02 
Offline
Benutzeravatar

Registriert: 10.10.2014 13:14
Wohnort: Wolfenbüttel
Sieh dir mal GrabSprite() an:

Aus der Hilfe: Fotografiert ("grab") den Bildschirminhalt im Bereich von (x, y, Breite, Höhe) und erstellt daraus ein neues #Sprite. In der Kombination von Grabsprite und SaveSprite() ist es somit z.B. möglich, einen Screenshot eines Spiels zu erstellen.

_________________
weil einfach einfach einfach ist ... mach' ich es anders


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Sprite als tga speichern
BeitragVerfasst: 19.06.2018 18:51 
Offline

Registriert: 08.03.2009 16:08
grabSprite() hört sich gut an, liefert bei mir aber auch nur das große blaue Hintergrundsprite ohne die kleinen Rechtecke:

Code:
EnableExplicit

UsePNGImageDecoder()
InitSprite()
InitKeyboard()
Define window.i,screenwindow,spriteBig, spriteNr,x,y,painted,newSprite, Ergebnis
Global NewList spriteList.i()

window = OpenWindow(#PB_Any, 200,200,800,800,"Test")
screenwindow = OpenWindowedScreen(WindowID(window),0,0,800,800)

Procedure createspriteBig()
 Define spriteBig,x,y,
 spriteBig = CreateSprite(#PB_Any,800,800)
 StartDrawing(SpriteOutput(spriteBig))
 
 FillArea(0,0,-1,$FFCC66)

 StopDrawing()
 ProcedureReturn spriteBig
EndProcedure

Procedure createSprites()
 Define spriteNr,x,y
 For x = 1 To 20
  spriteNr =  CreateSprite(#PB_Any,15,15)
  RotateSprite(spriteNr,x*18,#PB_Absolute)
  AddElement(spriteList())
  spriteList() = spriteNr
 Next 
EndProcedure



spriteBig = createspriteBig()
createSprites()

Repeat
 
 DisplaySprite(spriteBig,0,0)
 
 If painted = 0
  ForEach spriteList()
   x + 1 : y + 1
   DisplaySprite(spriteList(), x*35,y*35)
  Next

  x = 0 : y = 0
  FlipBuffers()
  ClearScreen(RGB(0, 0, 0))
  EndIf

  ExamineKeyboard()
  If KeyboardInkey()
   StartDrawing(SpriteOutput(spriteBig))
   DrawingMode(#PB_2DDrawing_Default )
   ForEach spriteList()
    x + 1 : y + 1
    ;DrawImage(SpriteID(spriteList()),x*35,y*35)
   ;Box(x*35,y*35,15,15,0)
   Next
   StopDrawing()

  MessageRequester("Bild speichern und schließen?","",#PB_MessageRequester_YesNo)
 
  newSprite = GrabSprite(#PB_Any, 0,0,800,800)               ; < ===== grabsprite()
  Ergebnis = SaveSprite(newSprite,"sprite.png")
  Debug Ergebnis 

  If #PB_MessageRequester_Yes
   SaveSprite(spriteBig,"sprite.png")
   End
  EndIf
 EndIf

Until WaitWindowEvent() =  #PB_Event_CloseWindow


Wahrscheinlich mache ich da etwas falsch?

Ich habe noch 4.51 und 5.2etwas auf dem Computer, da habe ich leider nichts gefunden. Wenn es keine andere Lösung gibt, muss ich wahrscheinlich das Musem durchsuchen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Sprite als tga speichern
BeitragVerfasst: 19.06.2018 19:42 
Offline

Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge
Hallo!

Syntacks_Error hat geschrieben:
grabSprite() hört sich gut an, liefert bei mir aber auch nur das große blaue Hintergrundsprite ohne die kleinen Rechtecke:


Ich habe es dir mal repariert!

Code:
EnableExplicit

UsePNGImageDecoder()
UsePNGImageEncoder() ;Hallo Encoder ;)

InitSprite()
InitKeyboard()
Define window.i,screenwindow,spriteBig, spriteNr,x,y,painted,newSprite, Ergebnis
Global NewList spriteList.i()

window = OpenWindow(#PB_Any, 200,200,800,800,"Test",#PB_Window_SystemMenu)
screenwindow = OpenWindowedScreen(WindowID(window),0,0,800,800,0,0,0,#PB_Screen_NoSynchronization)

Procedure createspriteBig()
  Define spriteBig,x,y,
         spriteBig = CreateSprite(#PB_Any,800,800)
  StartDrawing(SpriteOutput(spriteBig))
 
  FillArea(0,0,-1,$FFCC66)
 
  StopDrawing()
  ProcedureReturn spriteBig
EndProcedure

Procedure createSprites()
  Define spriteNr,x,y
  For x = 1 To 20
    spriteNr =  CreateSprite(#PB_Any,15,15)
    RotateSprite(spriteNr,x*18,#PB_Absolute)
    AddElement(spriteList())
    spriteList() = spriteNr
  Next
EndProcedure


spriteBig = createspriteBig()
createSprites()

Repeat
 
  DisplaySprite(spriteBig,0,0)
 
  If painted = 0
    ForEach spriteList()
      x + 1 : y + 1
      DisplaySprite(spriteList(), x*35,y*35)
    Next
   
    x = 0 : y = 0
  EndIf
 
  ExamineKeyboard()
  If KeyboardPushed(#PB_Key_All)
    StartDrawing(SpriteOutput(spriteBig))
    DrawingMode(#PB_2DDrawing_Default)
    ForEach spriteList()
      x + 1 : y + 1
      ;DrawImage(SpriteID(spriteList()),x*35,y*35)
      ;Box(x*35,y*35,15,15,0)
    Next
    StopDrawing()
   
    If MessageRequester("Speichern!","Bild speichern und schließen?",#PB_MessageRequester_YesNo)
      If #PB_MessageRequester_Yes
        GrabSprite(newSprite, 0,0,800,800)               ; < ===== grabsprite()
        If IsSprite(newSprite)
          Ergebnis = SaveSprite(newSprite,GetCurrentDirectory()+"sprite.png", #PB_ImagePlugin_PNG)
          ;Debug Ergebnis
        EndIf
      EndIf
    EndIf
  EndIf
 
  FlipBuffers() ;Muss ans Ende (sonst ist der Screen leer beim speichern!)
  ClearScreen(RGB(0, 0, 0))
Until WaitWindowEvent() =  #PB_Event_CloseWindow


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Sprite als tga speichern
BeitragVerfasst: 19.06.2018 19:50 
Offline

Registriert: 08.03.2009 16:08
Phatastisch! Da hatte ich wohl die Konvention mißverstanden. Problem gelöst, danke.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Sprite als tga speichern
BeitragVerfasst: 19.06.2018 20:09 
Offline

Registriert: 08.03.2009 16:08
... und einiges mehr, wie ich gerade sehe :-)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Sprite als tga speichern
BeitragVerfasst: 19.06.2018 23:25 
Offline
Benutzeravatar

Registriert: 01.04.2007 20:18
Nur nebenbei : In dem obigen Fall ist
Code:
FillArea(0,0,-1,$FFCC66)

um einige Ecken langsamer als
Code:
Box(0, 0, OutPutWidth(), OutPutHeight(), $FFCC66)


Bei Box() wird eine komplette Fläche eingefärbt, bei FillArea() wird Pixel für Pixel geprüft, ob die
Zeichenfarbe an eine andere gestossen ist... Wenn man also ein rechteckige Fläche "ausfüllen"
will sollte man Box() nehmen.

(Sind zwar bei den heutigen Maschinen nur ein paar Nanosekündchen, aber wenn man viel davon laufend
zeichnet merkt man es selbst dort.)

_________________
PureBasic 5.46 LTS / 5.62 (Windows x86/x64) | Windows10 Pro x64 | Z370 Extreme4 | i7 8770k | 32GB RAM | iChill GeForce GTX 980 X4 Ultra | HAF XF Evo​​


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 17 Beiträge ]  Gehe zu Seite Vorherige  1, 2

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye