Aktuelle Zeit: 14.12.2019 06:43

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 13 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Unterschied Image/Sprite
BeitragVerfasst: 14.02.2018 13:28 
Offline
Benutzeravatar

Registriert: 06.07.2017 12:24
Entschuldigung, wenn das eine blöde Frage ist, aber kann mir jemand einmal einen kleinen Crash-Kurs geben, worin sich Images und Sprites unterscheiden?
Auf den ersten Blick sind beides erstmal ein Werkzeug um Bilder auf dem Bildschirm darzustellen.
Wann sollte man was benutzen? In Blitzbasic (mein leider nicht mehr sicheres Herkunftsland ;-) ) gab es nur den Image-Befehl.

_________________
Now these points of data make a beautiful line,
And we're out of Beta, we're releasing on time.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Unterschied Image/Sprite
BeitragVerfasst: 14.02.2018 13:31 
Offline
Benutzeravatar

Registriert: 23.07.2011 02:08
Sprites werden auf einem Screen (für Spiele) angezeigt.
Images entweder in einem Image-Gadget, oder können auf ein Canvas-Gadget gezeichnet werden. Um Images auf einem Screen anzuzeigen, muss erst ein Sprite erstellt werden, auf den das Image gezeichnet wird.

_________________
Signatur und so


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Unterschied Image/Sprite
BeitragVerfasst: 14.02.2018 13:56 
Offline
Benutzeravatar

Registriert: 06.07.2017 12:24
Schonmal danke für die Antwort, aber Images kann ich doch auch auf einen Screen anzeigen? :?
Habe gerade meinen Minesweeper-Klon fertigprogrammiert - da öffne ich einen Windowed Screen und zeichne Images drauf.

_________________
Now these points of data make a beautiful line,
And we're out of Beta, we're releasing on time.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Unterschied Image/Sprite
BeitragVerfasst: 14.02.2018 14:07 
Offline
Ein Admin
Benutzeravatar

Registriert: 29.08.2004 20:20
Wohnort: Saarbrücken
Ein größerer Unterschied ist dieser: Sprites werden im Grafikkartenspeicher abgelegt und können dementsprechend sehr schnell von der Grafikkarte angezeigt und manipuliert werden. Deswegen gibt es in der Hinsicht auch einen Haufen mehr Befehle bei Sprites. Images werden im Arbeitsspeicher abgelegt und unter Windows zum Beispiel von GDI verwaltet, bei Linux von GTK. Sie eignen sich nicht für eine super schnelle Bildschirmausgabe und lassen sich auch nicht auf so viele Weisen in Echtzeit manipulieren wie Sprites.
Grob gesagt: Images werden von der CPU gerendert, Sprites von der GPU. Das kann gerade bei vielen gleichzeitigen Bildern einen enormen Geschwindigkeitsunterschied bringen.

_________________
Neustes Video: Neje DK - 1 Watt Laser Engraver
Ubuntu Gnome 19.04 LTS x64, PureBasic 5.71 x64 (außerdem 4.41, 4.50, 4.61, 5.00, 5.10, 5.11, 5.21, 5.22, 5.30, 5.31, 5.40, 5.50, 5.60)
"Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen – Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Unterschied Image/Sprite
BeitragVerfasst: 14.02.2018 14:12 
Offline
Benutzeravatar

Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9
@diceman:

ich glaube, dass Du die Unterschiede am besten erkennst, wenn Du Dir die jeweiligen Hilfeseiten anschaust:

http://www.purebasic.com/german/documentation/image/index.html

http://www.purebasic.com/german/documentation/sprite/index.html

Zitat:
'Sprites' sind Computerspielern bestens bekannt. Diese sind kleine Bilder, manchmal auch 'Brushes' (Pinsel) genannt, welche an jeder Position des Bildschirms angezeigt werden können. Die Sprites können mittels einem transparenten Layer (Schicht) über Grafiken bewegt werden. Noch besser: PureBasic erlaubt das Ausführen von Echtzeit-Effekten wie Schatten, Alpha-Blending, Einfärben, Zoomen, Rotieren, ... - und all dies im Fenster- oder 'Fullscreen' (Bildschirm) Modus.


Grüße ... Peter

_________________
Schrödingers Smiley :):


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Unterschied Image/Sprite
BeitragVerfasst: 14.02.2018 14:14 
Offline
Benutzeravatar

Registriert: 06.07.2017 12:24
Alles klar, also lautet die Überlegung hier Arbeitsspeicher vs. Grafikkarte. :allright:
Das ganze Transparenz-/ Alpha-Gedöns muß ich aber noch verinnerlichen, also wo ich welche Parameter initialisieren muß, damit das so funktioniert wie ich mir das wünsche. Hatte in Blitzbasic ausschließlich die Möglichkeit, eine Farbe in einem Image auf Transparent zu setzen, während PureBasic mir eine ganze Bibliothek an Befehlen zur Bildmanipulation anbietet; da probiere ich aber gerne selbst ein bißchen rum.

@Kiffi
Ja, die Hilfe habe ich mir durchgelesen; fand das aber, mit Verlaub, nicht so eindeutig, insbesondere was Unterschiede und Anwendungsgebiete angeht.
Zitat:
[...] kleine Bilder, manchmal auch 'Brushes' (Pinsel) genannt, welche an jeder Position des Bildschirms angezeigt werden können. Die Sprites können mittels einem transparenten Layer (Schicht) über Grafiken bewegt werden.

Das trifft auf den ersten Blick erstmal auch auf Images zu. :)

_________________
Now these points of data make a beautiful line,
And we're out of Beta, we're releasing on time.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Unterschied Image/Sprite
BeitragVerfasst: 14.02.2018 17:28 
Offline
Benutzeravatar

Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9
diceman hat geschrieben:
Ja, die Hilfe habe ich mir durchgelesen; fand das aber, mit Verlaub, nicht so eindeutig, insbesondere was Unterschiede und Anwendungsgebiete angeht.

mir fielen da auf Anhieb RotateSprite() und SpritePixelCollision() auf, welches in Spielen ja ganz nützlich sein könnte (vermutlich; bin kein Spiele-Programmierer).

Grüße ... Peter

_________________
Schrödingers Smiley :):


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Unterschied Image/Sprite
BeitragVerfasst: 14.02.2018 19:52 
Offline
Benutzeravatar

Registriert: 06.07.2017 12:24
So langsam steige ich durch ...
Eigentlich wollte ich erstmal nur wissen, wie man eine bestimmte Farbe in einem Bild maskiert, so daß diese transparent dargestellt wird. Für Image habe ich diesbezüglich nix so wirklich gefunden, was sich einfach und intuitiv implementieren lässt, aber mit DisplayTransparentSprite() und TransparentSpriteColor() scheint es zu funktionieren, und das reicht auch erstmal für meine bescheidenen Zwecke. :-)
Danke euch allen!

_________________
Now these points of data make a beautiful line,
And we're out of Beta, we're releasing on time.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Unterschied Image/Sprite
BeitragVerfasst: 14.02.2018 21:47 
Offline

Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge
diceman hat geschrieben:
Eigentlich wollte ich erstmal nur wissen, wie man eine bestimmte Farbe in einem Bild maskiert, so daß diese transparent dargestellt wird. Für Image habe ich diesbezüglich nix so wirklich gefunden


Hallo diceman!

Ich habe mal folgende "LoadImageTransparent" - Funktion im Forum gefunden. Sieht ganz nice aus.
Quelle: http://www.purebasic.fr/english/viewtopic.php?t=66303

Code:
EnableExplicit

UsePNGImageDecoder()
UseJPEGImageDecoder()
UseTGAImageDecoder()
UseGIFImageDecoder()
UseTIFFImageDecoder()

Global fname.s = ""

Procedure ByteSwap32(addrLong)
  CompilerIf #PB_Compiler_Processor = #PB_Processor_x64
    !mov rax, [p.v_addrLong]
    !mov ecx, [rax]
    !bswap ecx
    !mov [rax], ecx
  CompilerElse
    !mov eax, [p.v_addrLong]
    !mov ecx, [eax]
    !bswap ecx
    !mov [eax], ecx
  CompilerEndIf
EndProcedure

Procedure.i LoadImageTransparent (hLoadImg, TransparentColorRGB.l)
  Protected width,height,pitch,imgbase, x,y, hImg32, *RGBA.Long
  width = ImageWidth(hLoadImg)
  height = ImageHeight(hLoadImg)
  hImg32 = CreateImage(#PB_Any, width, height, 32)
  If hImg32 = 0: ProcedureReturn 0: EndIf
  If StartDrawing(ImageOutput(hImg32)) = 0
    FreeImage(hImg32):   ProcedureReturn 0
  EndIf
  If DrawingBufferPixelFormat() & #PB_PixelFormat_32Bits_RGB
    TransparentColorRGB | $FF000000    ;Linux & OSX
  Else
    ByteSwap32(@TransparentColorRGB)   ;Windows
    TransparentColorRGB = (TransparentColorRGB >> 8) | $FF000000
  EndIf
  DrawingMode(#PB_2DDrawing_Default)
  DrawImage(ImageID(hLoadImg),0,0,width,height)
  pitch = DrawingBufferPitch()
  imgbase = DrawingBuffer()
  width-1: height-1
  For y = 0 To height
    *RGBA = imgbase + (y * pitch)
    For x = 0 To width
      If *RGBA\l = TransparentColorRGB
        *RGBA\l = 0
      EndIf
      *RGBA+4
    Next x
  Next y
  StopDrawing()
  ProcedureReturn hImg32
EndProcedure

fname = OpenFileRequester("Wähle ein Bild","", "*.*", 0)
Define hLoadImg = LoadImage(#PB_Any, fname)

Define TransparentColor.l = RGB(0,255,33) ;Wähle die Transparentsfarbe
Define hTransparentImg = LoadImageTransparent(hLoadImg, TransparentColor)
If hTransparentImg = 0
  MessageRequester("Fehler","Das Bild konnte nicht geladen werden."):    End
EndIf

FreeImage(hLoadImg)

OpenWindow(0,0,0,500,500,"Transparentsfarbe bei Bilder",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
SetWindowColor(0,RGB(0,0,0))
ImageGadget(0,0,0,400,400, ImageID(hTransparentImg))
Repeat:Until WaitWindowEvent()=#PB_Event_CloseWindow

_________________
Betriebssysteme: MX Linux 19 / Windows 10 / Mac OS 10.15.1 / Android 7.0 ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Unterschied Image/Sprite
BeitragVerfasst: 15.02.2018 15:36 
Offline
Benutzeravatar

Registriert: 23.07.2011 02:08
Du zeichnest deine Bilder dann aber in jedem Durchlauf auf den Screen, oder seit wann gibt es "DisplayImage()" auf einem Screen?

Von StartDrawing() im Mainloop sollte aus Geschwindigkeitsgründen abgesehen werden. Steht auch in der Hilfe afair.
Fällt dir bei Minesweeper vielleicht nicht auf, aber wenn du das mit einem kleinen Shooter-Game oder so machst, dann bricht dir wahrscheinlich deine Framerate so richtig ein.

_________________
Signatur und so


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

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 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:  
cron

 


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