ich arbeite an einem kleinen Grafikprogramm. Das soll nicht Gimp ersetzen, sondern dient nur einem einzigen Zweck, für den es nichts gibt. Als "Pinsel" verwende ich ein Sprite, weil man das rotieren kann. Weil ich es nicht anders hinbekommen habe, benutze ich für das Bild, das bemalt werden soll, auch ein Sprite. Das mit dem Pinsel und dem Malen klappt auch wunderbar.
Problem ist nur: Sprites kann man nicht als tga speichern (Ist das Absicht oder ein Versehen?) sondern nur als bmp,jpg, jpeg2000 (nie gehört) und png:
SaveSprite(#Sprite, DateiName$ [, ImagePlugin [, Flags]])
#PB_ImagePlugin_BMP : Speichert das Bild als BMP. (Standard-Format)
#PB_ImagePlugin_JPEG : Speichert das Bild als JPEG (der Befehl UseJPEGImageEncoder() muss verwendet werden)
#PB_ImagePlugin_JPEG2000 : Speichert das Bild als JPEG2000 (der Befehl UseJPEG2000ImageEncoder() muss verwendet werden)
#PB_ImagePlugin_PNG : Speichert das Bild als PNG (der Befehl UsePNGImageEncoder() muss verwendet werden)
Ich habe es einfach mal "SaveSprite(#Sprite, DateiName$#PB_ImagePlugin_TGA)" versucht, geht aber nicht.
Ich brauche es aber unbeding als tga. Dass ich das mit Gimp umwandeln könnte, ist klar, aber wie sieht das denn aus ...
Ich dachte mir nun, das Sprite liegt ja im Speicher, also lese ich den einfach aus. 24 bit, also 3 * 3 byte über die Bildgröße 1600 * 1600 macht 3 * 1600 * 1600. Die byte-Reihenfolge kriege ich schon hin, wenn die nicht stimmen sollte. Den tga-Header kopiere ich einfach aus einer anderen tga im selben Format (18 Byte, hat schon 10.000 mal geklappt). Von Speicher verstehe ich aber leider überhaupt nichts.
Die Speicheraddresse des Spites, kriegt man ja, habe ich hier gelesen, mit drawingbuffer() heraus. Also habe ich geschrieben:
Code: Alles auswählen
;Kopieren des tga-Headers
file1 = ReadFile(#PB_Any,"kopier.tga")
file2 = CreateFile(#PB_Any,"sprite.tga")
For x = 1 To 18
a = ReadAsciiCharacter(file1)
WriteAsciiCharacter(file2,a)
Next
; jetzt geht's los
StartDrawing(SpriteOutput(spriteBig))
*Buffer = DrawingBuffer()
StopDrawing()
For x = 1 To 1600 * 1600 * 3
a = PeekA(*buffer)
*buffer = *buffer + 8
WriteAsciiCharacter(file2,a)
Next