Share via


Tipi di superficie

I tipi di superficie possono essere visualizzati nel contesto di come vengono gestiti. Esistono i tipi seguenti:

  • Superfici gestite dal motore

  • Superfici gestite dal dispositivo (bitmap di formato standard)

  • Superfici gestite dal dispositivo (bitmap non standard)

Superfici gestite dal motore

Superficie gestita dal motore:

  • Viene creato e gestito da GDI.

  • Viene creato come bitmap indipendente dal dispositivo (DIB) in uno dei formati DIB standard: top-down, in cui l'origine si trova nell'angolo superiore sinistro o in basso, in cui l'origine si trova nell'angolo inferiore sinistro.

  • È di tipo STYPE_BITMAP.

  • Non dispone di un handle del dispositivo corrispondente in una superficie.

Una bitmap di formato standard è un singolo piano, compresso pixel (in cui i dati per ogni pixel vengono archiviati in modo contiguo) bitmap di formato. Ogni riga di analisi della bitmap è allineata a un limite a quattro byte.

Le bitmap create nella funzione EngCreateBitmap sono in formato DIB. Una bitmap deve essere in formato DIB per il motore da gestire.

Superfici gestite dal dispositivo (bitmap di formato standard)

Una superficie gestita dal dispositivo:

  • Viene creata da una chiamata alla funzione DrvCreateDeviceBitmap del driver del dispositivo.

  • Ha un handle di dispositivo associato a una superficie (DHSURF; per altre informazioni, vedere SURFOBJ).

  • Può essere opaca o nonopaque.

Una superficie gestita da dispositivo opaca è una per cui GDI non ha alcuna informazione sul formato bitmap né un riferimento ai bit nella bitmap. Per questi motivi, il driver deve supportare, almeno, le funzioni DrvBitBlt, DrvTextOut e DrvStrokePath . Il tipo di tale superficie è STYPE_DEVBITMAP.

Una superficie gestita dal dispositivo nonopaque è una per cui GDI ha informazioni sul formato bitmap e conosce la posizione dei bit all'interno della bitmap. A causa di questo, il driver non deve implementare alcuna operazione di disegno, rinviando tutti a GDI. Il tipo di tale superficie è SYTPE_BITMAP.

Per convertire una bitmap opaca gestita dal dispositivo in una bitmap nonopaque, deve chiamare la funzione EngModifySurface . Con questa chiamata, il driver informa GDI del formato bitmap e della posizione della bitmap in memoria.

Quando un driver dispone di una superficie DIB gestita dal dispositivo, il driver può tornare a GDI per avere GDI disegnare sulla superficie. Un driver che gestisce le proprie superfici, ma usa un DIB, può comunque fare riferimento alle chiamate a GDI eseguendo il wrapping di un DIB (creato con la funzione EngCreateBitmap ) intorno alla superficie. I passaggi seguenti descrivono come il driver può avere GDI disegnare su una superficie DIB gestita dal dispositivo:

  1. Il driver chiama EngCreateBitmap per creare una superficie gestita dal motore DIB.

  2. Il driver chiama la funzione EngCreateDeviceBitmap per creare una superficie bitmap dipendente dal dispositivo (DDB), ovvero una superficie DIB gestita dal dispositivo.

  3. Il driver salva internamente i dati DIB gestiti dal motore nei dati DDB gestiti dal dispositivo.

  4. GDI chiama sempre il driver per interagire con la superficie tramite i dati DDB gestiti dal dispositivo.

  5. Quando il driver riceve una chiamata da GDI e non riesce a gestire la chiamata (ad esempio, il driver non può gestire il ritaglio complesso), il driver recupera i dati DIB archiviati nei dati DDB e passa i dati DIB a GDI per eseguire il rendering.

Superfici gestite dal dispositivo (bitmap non standard)

Un driver può abilitare una superficie non DIB gestita dal dispositivo chiamando la funzione EngCreateDeviceSurface per creare la superficie e restituire un handle. GDI si basa sul driver per accedere, per controllare il disegno da e per leggere da una superficie gestita dal dispositivo.

Una bitmap dipendente dal dispositivo (DDB), a volte denominata bitmap in formato dispositivo, è un altro tipo di superficie non DIB, gestita dal dispositivo. DDB è supportato per consentire determinati driver, ad esempio il driver VGA, di implementare trasferimenti di blocchi bitmap-to-screen più veloci. DDB consente anche ai driver di disegnare alle bitmap di tipo banked o non DIB in memoria di visualizzazione offscreen. Se è necessario un DDB, il driver può supportare la funzione DrvCreateDeviceBitmap e chiamare la funzione EngCreateDeviceBitmap per avere il motore restituito un handle alla bitmap.