Referenz - IMAGECONVERTROW
Syntax: IMAGECONVERTROW Quelle, Quell_bpp, Ziel, Ziel_bpp, Breite [, IstRGB]
Typ: Anweisung
Kategorie: Grafik
IMAGECONVERTROW kopiert eine bestimmte Anzahl von Pixeln von einem Grafikpuffer in einen anderen und konvertiert dabei die Anzahl der Bits pro Pixel in der Kopie auf einen gewünschten Wert.
- 'Quelle' ist ein Pointer vom Typ ANY PTR auf die Adresse, an der die Bildzeile beginnt, die konvertiert werden soll. Die Quelle kann entweder ein Bildpuffer im High-/Truecolor-Format sein (mit 24 oder 32 bpp), oder ein Bildpuffer im palettenindizierten Format mit ein bis acht bpp. Die Konversion eines palettenindizierten Bildes wird nur dann korrekte Ergebnisse erzielen, wenn Sie in einem Bildschirmmodus arbeiten, der die für das Bild korrekte Palette benutzt.
- 'Quell_bpp' ist die Anzahl der Bits pro Pixel in der Quelle. Zulässig sind die Werte 1-8, 24 und 32.
- 'Ziel' ist ein Pointer vom Typ ANY PTR auf den Beginn der Zeile, in die das konvertierte Bild geschrieben werden soll. Der Pointer darf auf einen Bereich innerhalb eines Bildpuffers für ein 16bpp oder einen 32bpp-Modus zeigen. Nur wenn das Quellbild ein palettenindiziertes Bild ist, kann diese Adresse auch auf einen Bildpuffer für ein Bild mit 1-8bpp verweisen.
- 'Ziel_bpp' ist die Anzahl der Bits pro Pixel im Zielpuffer. Zulässig sind die Werte 1-8, 16 und 32.
- 'Breite' ist die Breite einer Zeile in Pixel, oder auch die Anzahl der Pixel des gesamten Bildes, berechnet nach Breite * Höhe. Auf diese Art kann ein ganzes Bild in einem Schritt konvertiert werden; dies ist jedoch nur möglich, wenn die Bildinformation in einem Stück abgespeichert ist und nicht durch Padding-Bytes unterbrochen wird. Während frühere FreeBASIC-Versionen einen QB-artigen Bildpuffer ohne Padding verwendeten, werden die Zeilen in einem aktuellen Bildpuffer auf ein Vielfaches von 16 Byte gepaddet; vgl. dazu GET (Grafik), "Unterschiede unter den FB-Dialektformen".
- 'IstRGB' wird verwendet, um bei High-/Truecolor-Bildern (ab einer Farbtiefe von 15bpp) die Reihenfolge der Rot-, Grün- und Blauanteil-Bytes festzulegen. Wird hier null angegeben, so vertauscht FreeBASIC während der Konversion die Position des Rot- und Blaukanals; die Reihenfolge der Teilfarbinformationen wird also umgekehrt. Wird hier ein Wert ungleich null angegeben oder wird der Parameter ausgelassen, so behält FreeBASIC die Reihenfolge der Farbkanäle bei, so wie es in 'Quelle' vorgegeben wurde.
Beispiel:
#include "fbgfx.bi"
#if __FB_LANG__ = "fb"
Using FB
#endif
Const As Integer w = 64, h = 64
Dim As IMAGE Ptr img8, img32
Dim As Integer x, y
' erstelle ein 32-bit-Image in der Größe w*h:
ScreenRes 1, 1, 32, , GFX_NULL
img32 = ImageCreate(w, h)
If img32 = 0 Then Print "IMAGECREATE ist bei img32 fehlgeschlagen!": Sleep: End
' erstelle ein 8-bit-Image in der Größe w*h:
ScreenRes 1, 1, 8, , GFX_NULL
img8 = ImageCreate(w, h)
If img8 = 0 Then Print "IMAGECREATE ist bei img8 fehlgeschlagen!": Sleep: End
' fülle das 8-bit-Image mit einem Muster
For y = 0 To h - 1
For x = 0 To w - 1
PSet img8, (x, y), 56 + (x + y) Mod 24
Next x
Next y
' öffne ein Grafikfenster im 8-bit-Modus und gib dort das Bild aus
ScreenRes 320, 200, 8
WindowTitle "8-bit-Farbmodus"
Put (10, 10), img8
Sleep
' kopiere die Daten in ein 32-bit-Image
Dim As Byte Ptr p8, p32
Dim As Integer pitch8, pitch32
#ifndef ImageInfo ' ältere Versionen von FreeBASIC besitzen keine Funktion IMAGEINFO
#define GETPITCH(img_) IIf(img_->type=PUT_HEADER_NEW,img_->pitch,img_->old.width*img_->old.bpp)
#define GETP(img_) CPtr(Byte Ptr,img_)+IIf(img_->type=PUT_HEADER_NEW,SizeOf(PUT_HEADER),SizeOf(_OLD_HEADER))
pitch8 = GETPITCH(img8): p8 = GETP(img8)
pitch32 = GETPITCH(img32): p32 = GETP(img32)
#else
ImageInfo( img8, , , , pitch8, p8 )
ImageInfo( img32, , , , pitch32, p32 )
#endif
For y = 0 To h - 1
ImageConvertRow(@p8 [ y * pitch8 ], 8, _
@p32[ y * pitch32], 32, _
w)
Next y
' öffne ein Grafikfenster im 32-bit-Modus und gib dort das Bild aus:
ScreenRes 320, 200, 32
WindowTitle "32-bit-Farbmodus"
Put (10, 10), img32
Sleep
' Speicher freigeben
ImageDestroy img8
ImageDestroy img32
Unterschiede zu QB: neu in FreeBASIC
Unterschiede zu früheren Versionen von FreeBASIC: existiert erst seit FreeBASIC v0.16
Unterschiede unter den FB-Dialektformen:
In der Dialektform -lang qb steht IMAGECONVERTROW nicht zur Verfügung und kann nur über __IMAGECONVERTROW aufgerufen werden.
Siehe auch:
IMAGECREATE, IMAGEDESTROY, IMAGEINFO, GET (Grafik), PUT (Grafik), SCREENRES, Grafik
Zusätzliche Informationen und Funktionen | ||||
---|---|---|---|---|
|