Seite 1 von 1
Ein Bild Vertikal spiegeln.
Verfasst: 03.04.2022 16:32
von funkheld
Hallo, guten Tag.
Wie kann man bitte ein Bild Vertikal spiegeln mit einfachen aufruf der Daten und wieder reinschreiben der Daten in eine neue Datei?
Hat 49152 Byte (256x192)
Breite 256 Byte und eine Höhe von 192 Byte.
Möchte es mit Purebasic machen und nicht mit einem Aufruf von einem Grafikprogramm (Irfan oder so...)
Danke.
Re: Ein Bild Vertikal spiegeln.
Verfasst: 03.04.2022 20:22
von Andesdaf
Gib in der Forensuche 'Image spiegeln' ein und du wirst fündig werden.
Re: Ein Bild Vertikal spiegeln.
Verfasst: 03.04.2022 21:02
von funkheld
Das ist es nicht.
Die Farbwerte verändern sich.
Würde es gerne Byte für Byte wechseln mit Read und WriteByte.
Re: Ein Bild Vertikal spiegeln.
Verfasst: 03.04.2022 21:29
von RSBasic
Für ein Spiel habe ich folgenden Code verwendet, um Grafiken zu spiegeln:
viewtopic.php?p=348908#p348908
Davon eine angepasste Version für Sprites, die sich in meiner GameFunctions.pbi-Datei (enthält viele wiederverwendbare Funktionen) befindet:
Code: Alles auswählen
Procedure MirrorSprite(SpriteID)
Protected zeilenlaenge
Protected hoehe
Protected breite
Protected tiefe
Protected *linkes.pixel
Protected *rechtes.pixel
Protected i, j, k, l
Protected halbe_breite
Protected farbpuffer
Protected *pixelpuffer
If StartDrawing(SpriteOutput(SpriteID))
*linkes.pixel = DrawingBuffer()
zeilenlaenge = DrawingBufferPitch()
StopDrawing()
EndIf
hoehe = SpriteHeight(SpriteID)
breite = SpriteWidth(SpriteID)
tiefe = SpriteDepth(SpriteID) / 8
halbe_breite = breite / 2
l = ((breite - 1) * tiefe)
For i = 1 To hoehe
k = zeilenlaenge
*rechtes = *linkes + (tiefe * (breite-1))
For j = 1 To halbe_breite
farbpuffer = *linkes\pix_l
*linkes\pix_l = *rechtes\pix_l
*rechtes\pix_l = farbpuffer
*linkes + tiefe
*rechtes - tiefe
k - tiefe
Next
*linkes + k
Next
ProcedureReturn -1
EndProcedure
Mit diesem Code konnte ich keine Veränderung der Farbwerte feststellen.