Home Programmierdokumentation INQUIRE PRINTER SCALING (VDI 5, 39) RESIZE BITMAP (VDI 100, 2)

2.12 OPEN BITMAP (VDI 100, 3)

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:

Tabelle 7: Rasterfunktionen
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.


Home Programmierdokumentation INQUIRE PRINTER SCALING (VDI 5, 39) RESIZE BITMAP (VDI 100, 2)