v_open_bm() ist die moderne Variante von v_opnbm und arbeitet mit derselben Bitmap- und Pixelformatbeschreibung wie vr_transfer_bits().
Dekl.: int16 v_open_bm( int16 base_handle, GCBITMAP *bitmap,
int16 color_flags, int16 unit_flags, int16 pixel_width, int16 pixel_height );
Aufruf: bm_handle = v_open_bm( screen_handle, &bitmap, 0, 0, 0, 0 );
Variable Belegung Bedeutung
Eingaben:
contrl[0] 100
contrl[1] 0 Einträge in ptsin
contrl[3] 4 Einträge in intin
contrl[5] 3 3: v_open_bm
contrl[6] base_handle
contrl[7/8] bitmap Zeiger auf GCBITMAP oder 0
intin[0] color_flags Behandlung der Farbtabellen
intin[1] unit_flags Maßeinheit der Pixelausmaße
intin[2] pixel_width Pixelbreite oder 0
intin[3] pixel_height Pixelhöhe oder 0
Ausgaben:
contrl[2] 0 Einträge in ptsout
contrl[4] 1 Einträge in intout
contrl[6] bm_handle 0: Fehler
sonst Handle der Bitmap
intout[0] 1
Wenn das unterste Bit von <color_flags> gesetzt ist, benutzt die Bitmap die gleiche Farbtabelle wie <base_handle>. Ist das Bit gelöscht, wird für die Bitmap eine eigene Farbtabelle und eine eigene inverse Farbtabelle angelegt (wodurch für manche Programme die Behandlung von Bildschirm-Caches oder Hintergrundpuffern deutlich einfacher werden sollte). Farbveränderungen auf dem Bildschirm ändern dann nicht die Farbeinträge der Bitmap. Von <color_flags> wird z.Zt. nur das unterste Bit benutzt. Alle anderen Bits müssen 0 sein.
Hinweise: Wenn Bitmap und Bildschirm die gleiche Farbtabelle benutzen, dürfen die Farben nur über das Handle des Bildschirms (also <base_handle>) verändert werden, da andernfalls die Farben nicht in der Hardware (CLUT) eingetragen werden. Das Demoprogramm OPENBM zeigt die Auswirkung von <color_flags>.
<bitmap> zeigt dabei auf eine GCBITMAP-Struktur oder ist 0. Wenn GCBITMAP 0 ist, wird die GCBITMAP des Handles <base_handle> benutzt. Die Einträge in der Bitmap werden wie folgt ausgewertet:
| Eintrag | Funktion |
| addr | Adresse der Bitmap oder 0 (VDI fordert den Speicher an und trägt die Adresse nachher hier ein) |
| width | Breite einer Zeile in Bytes, wenn <addr> gültig ist |
| bits | Bittiefe, korrespondiert mit <px_format> |
| px_format | Pixelformat oder 0 (Pixelformat wird von <base_handle> übernommen) |
| wenn alle folgenden Koordinaten auf 0 gesetzt sind und das VDI den Speicher anfordert | |
| [<addr> ist 0], werden die Ausmaße von <base_handle> übernommen | |
| xmin | minimale diskrete x-Koordinate der Bitmap (in der Regel 0) |
| ymin | minimale diskrete y-Koordinate der Bitmap (in der Regel 0) |
| xmax | maximale diskrete x-Koordinate der Bitmap + 1 (in der Regel die Breite) |
| ymax | maximale diskrete y-Koordinate der Bitmap + 1 (in der Regel die Höhe) |
| ctab | wird ignoriert |
| itab | wird ignoriert |
| reserved0 | muß 0 sein! |
| reserved1 | muß 0 sein! |
Zusätzlich wird in <pixel_width> und <pixel_height> die Pixelgröße übergeben, damit die Fonts richtig skaliert werden können. Falls einer der beiden Einträge 0 ist, werden sie von <base_handle> übernommen. Die Größenangaben werden abhängig von <flags> interpretiert:
-1: Angaben in dpi 0: Angaben in Mikrometern 1: Angaben in 1/10 Mikrometern 2: Angaben in 1/100 Mikrometern 3: Angaben in 1/1000 Mikrometern
Da <ctab> ignoriert wird, wird für die Bitmap die der Bittiefe entsprechende Systemfarbtabelle im Farbraum CSPACE_RGB (RGB) angelegt. Für mögliche spätere Erweiterungen in diesem Bereich ist die Variable <zero>, die daher jetzt auf 0 gesetzt werden muß.
Wenn die Funktion erfolgreich ist, wird ein von 0 verschiedenes Handle zurückgeliefert. Wenn das VDI den Speicher für die Bitmap angefordert hat und beim Aufruf eine leere (oder nur teilweise gefüllte) GCBITMAP-Struktur übergeben wurde, ist die Struktur nach dem Aufruf vollständig initialisiert. Programme dürfen weder die Farbtabelle noch die inverse Farbtabelle der Struktur durch direkten Zugriff ändern. Alle Veränderungen müssen durch die Farbfunktionen unter dem zurückgelieferten Handle erfolgen.
Diese Funktion ist verfügbar ab EdDi-Version 1.20.