Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Sprite => BitMap; BitMap => Sprite (https://www.delphipraxis.net/19347-sprite-%3D-bitmap%3B-bitmap-%3D-sprite.html)

SeiAktiv 1. Apr 2004 14:14


Sprite => BitMap; BitMap => Sprite
 
ich habe folgendes problem

aufbau sprite ist bekannt und aufbau bitmap ebenfalls.

gibt es eine vereinfachte möglichkeit bei delphi ein sprite in mehrere bitmaps zu konvertieren und umgekehrt ohne dies per hand zu programmieren ?

vielleicht kann mir jemand einen hinweis oder infos zur problematik geben.

dank im voraus

sCrAPt 4. Apr 2004 21:34

Re: Sprite => BitMap; BitMap => Sprite
 
mir ist kein zerteilemeinspriteinvielebitmaps(S: TSprite; Speicherort: String); bekannt, also würd ich sagen du musst dies per Hand programmieren ;)

:angle:, sCrAPt

maximov 5. Apr 2004 09:58

Re: Sprite => BitMap; BitMap => Sprite
 
Willkommen in der DP :-D

Zitat:

Zitat von SeiAktiv
gibt es eine vereinfachte möglichkeit bei delphi ein sprite in mehrere bitmaps zu konvertieren und umgekehrt ohne dies per hand zu programmieren ?

Ich versteh den sinn nicht? Ein bild wird zu einem sprite, wenn man ein bitmap auf eine zeichen-oberfläche zeichnet, also hättest du doch schon dein bitmap und jedwede konvertierung ist hinfällig...oder hab ich was falsch verstanden?

SeiAktiv 5. Apr 2004 12:46

Re: Sprite => BitMap; BitMap => Sprite
 
komprimierte sprites entsprechen nicht dem aufbau eines bitmap und müssen daher in "echte" bitmap umgewandelt werden.

ich habe mir zwar schon einiges angelesen doch eine einfache importfunktion (in ein image oder paintbox) habe ich nicht gefunden.

zumal die sprites die ich meine informationen beinhalten was alpha, color und z-buffer betrifft. eine zusätzliche palettendatei besteht zudem (um 24bit zu generieren).

diese wäre zwar zu vernachlässigen, doch wenn man sie bräuchte kann man dies schnell selber "zu fuß" mit einbinden.

maximov 5. Apr 2004 12:53

Re: Sprite => BitMap; BitMap => Sprite
 
komprimierte sprites? ...dann sei doch so freundlich un sage was für komprimierte texturen du meinst. Welche API, welches system?

SeiAktiv 5. Apr 2004 13:57

Re: Sprite => BitMap; BitMap => Sprite
 
spriteaufbau ist wie folgt.


aufbau des layouts

offset | größe | value
0 | 4 | version
4 | 4 | anzahl der frames
8 | 4 | farbpalette
12 | 4 | offset tabelle
var | var | frame 0
var | var | frame 1
| | . . .

aufbau der frames

offset | größe | value
0 | 2 | breite
2 | 2 | höhe
4 | 2 | Flags
6 | 2 | null
8 | 2 | farbpalette ID
10 | 2 | transparent pixel
12 | 2 | Y
14 | 2 | X
16 | 2 | reihen header 0
18 | var | reihen segments
var | 2 | reihen header 1
var | var | reihen segments
| | . . .
var | 2 | End marker (0xA000)


aufbau der reihe

Offset | größe | value
0 | 2 | was zu machen und zähler
2 | var | Pixel daten
var | opt | Ausrichtung in byte


dies auszulesen ist nicht das problem, nur wie bekomme ich dies in ein bitmap interpretiert bzw. in eine paintbox ?

vom prinzip sind alle daten vorhanden, möchte nur nicht etwas "langsames" unter delphi programmieren wenn es eine importfunktion oder ähnliches gibt.

vielleicht fange ich auch irgendwie falsch an, doch angezeigt bekomme ich es als bitmap nicht.

maximov 5. Apr 2004 15:04

Re: Sprite => BitMap; BitMap => Sprite
 
Da dies kein standard format zu sein scheint kann delphi das natürlich nicht lesen. Aber wenn du die daten korrekt interpretieren kannst, dann hält dich niemand davon ab, es via scanLine in ein TBitmap zu schreiben und dann mit TBitmap.saveToFile zu speichern...das kannst du dann für jeden frame tun.

Zu scaneLine gibt es hier sicher tausende beispiele.

SeiAktiv 6. Apr 2004 02:03

Re: Sprite => BitMap; BitMap => Sprite
 
danke für den hinweis, habe mir mal scanline zur gemüte geführt. funktioniert sogar recht prächtig (und ist schneller als einzelne pixel setzen).

inzwischen kann ich die sprites erkennen, allerdings habe ich probleme mit der zuordnung der palette, da diese ausgelagert ist in eine datei.

wenn ich mich recht erinnere bekomme ich diese zwar auch über pixel rgb farben setzen rein doch dann ist mein gesamter geschwindigkeitsgewinn mit scanline wieder dahin.

eine idee wie es einfacher oder schneller geht?

frage nebenbei, aus der erfahrung heraus..... was ist schneller im zeichnen bei delphi, paintbox oder image.picture.bitmap ?

maximov 6. Apr 2004 09:37

Re: Sprite => BitMap; BitMap => Sprite
 
Zitat:

Zitat von SeiAktiv
danke für den hinweis, habe mir mal scanline zur gemüte geführt. funktioniert sogar recht prächtig (und ist schneller als einzelne pixel setzen).

inzwischen kann ich die sprites erkennen, allerdings habe ich probleme mit der zuordnung der palette, da diese ausgelagert ist in eine datei.

Das sagt mir natürlich nix. Kommst du denn an die paletten-einträge rann?
Zitat:


wenn ich mich recht erinnere bekomme ich diese zwar auch über pixel rgb farben setzen rein doch dann ist mein gesamter geschwindigkeitsgewinn mit scanline wieder dahin.

hmmm..vielleicht hast du ein falsches pixel-bit-pattern? Delphis TColor ist BGR - Normal wäre ja RGB - könnte sein, dass du die bytes mal umsortieren musst. zB. so:
Delphi-Quellcode:
rgb := (bgr and $00FF00) or ((bgr shl 16) and $FF0000) or ((bgr shr 16) and $FF);
Zitat:


eine idee wie es einfacher oder schneller geht?

Viel schneller als scanLine wirds wohl nicht
Zitat:


frage nebenbei, aus der erfahrung heraus..... was ist schneller im zeichnen bei delphi, paintbox oder image.picture.bitmap ?
Kommt draus an was du vorhast? Wenn du eine animation flüssig ausgeben willst, dann sollte man die frames in einem, oder mehreren bildern puffern und dann nur noch die aktuelle phase auf die zeichefläche blitten :wink:


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:30 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz