Delphi pentru profesioniști

Pentru formatul bitmapului - DIB sau DDB - proprietatea este:

tip TBitraapHandleType = (bmDIB, bmDDB);

proprietate HandleType: TBitmapHandleType;

Adâncimea de culoare dorită a bitmap-ului poate fi recunoscută și reinstalată prin modificarea valorii proprietății:







TPixelFormat = (pfDevice, pflbit, pf4bit, pfSbit, pflSbit, PF 6Bit, pf24bit, pf32bit, pfCustom!);

proprietate PixelFormat: TPixelFormat;

Modul pfDevice corespunde bitmapului DDB. Adâncimea culorii la 1, 4 și 8 biți pe pixel este tradițională și asigură prezența unei imagini palete. Alte moduri se ocupă de stocarea punctelor directe de luminanță în fiecare dintre cele trei culori primare - roșu (R), verde (G) și albastru (B). Dimensiunea bitului de 15 biți corespunde alocării de biți de 5-5-5 (RGB555), 16 biți la RGB 565 și 24 de biți pentru RGB888. Modul pe 32 de biți este similar cu cel pe 24 de biți, dar adaugă și un al patrulea canal (canal alfa), care conține informații suplimentare despre transparența fiecărui punct. Modul pfCustom este destinat implementării graficelor proprii ale programatorului. Într-un standard de proprietăți TBitmap setare clasă PixelFormat în modul pfCustom va eșua - astfel încât să-l utilizați numai nevoie să scrie urmașii TBitmap.

Un bitmap este un tip de resursă. Bineînțeles, clasa TBitmap suportă încărcarea din resursele de aplicații:

procedura LoadFromResourcelD (instanță: THandle; ResID: ​​Integer);

procedura LoadFromResourceName (instanță: THandle; const ResName: string);

Aici exemplul este variabila globală a modulului System. stocarea identificatorului unic al copiei de execuție a aplicației (sau a bibliotecii dinamice).

Panza bitmapului este disponibilă prin proprietatea:

proprietate Canvas: TCanvas;

Cu ajutorul acestuia puteți desena pe suprafața unei imagini raster. Rețineți că nu există alți descendenți ai panzei TGraphic.

Descriptorii bitmap-ului și paletei sale sunt disponibile ca proprietăți:

proprietate mâner: HBITMAP;

Proprietate Paletă: HPALETTE;

Se ocupă de clasa TBitmap. Considerăm că principiul "un obiect este un descriptor" din cauza prezenței unui mecanism de memorare în cache este incorect. Două metode:

funcția ReleaseHandle: HBITMAP;

funcția ReleasePalette: HPALETTE;

returnează descriptorii bitmap-ului și, respectiv, paletei și apoi zero descriptorii, adică dacă le dă "utilizatorilor".

Atunci când orice adresă externă la descriptorul bitmap, și orice încercare de a desena pe panza divizia sa de o imagine mai multe obiecte este întreruptă, iar obiectul devine propria copie a conținutului descriptor. Există metode pentru aceasta:

  • procedură Dormant - descarcă imaginea în flux și distruge descriptorii bitmap-ului și paletei;
  • procedura Freeimage este mânerul "eliberare" bitmap pentru utilizare și modificare ulterioară. Aceasta înseamnă că, dacă există referințe la un descriptor dat, atunci acesta este duplicat; fluxul este șters.






Bitmap-ul poate fi monocrom și color, care este definit de proprietate:

proprietate Monocrom: boolean;

Valoarea True corespunde unui bitmap monocrom. Când îl modificați, conținutul este convertit în vizualizarea dorită.

Următoarele proprietăți sunt responsabile de transparența bitmap:

proprietate TransparentColor: TColor;

tip TTransparentMode = (tmAuto, tmFixed);

proprietate TransparentMode: TTransparentMode;

Dacă proprietatea TransparentMode este setată la tmAuto. apoi pentru culoarea transparentă (fundal) este adoptată culoarea pixelului din stânga sus. În caz contrar, această culoare este luată din proprietatea Transparentcolor.

Un bitmap poate fi folosit ca o mască pentru alte bitmap-uri. În acest caz, se transformă în două culori, unde culorile de fundal sunt vopsite în alb (vezi proprietatea Transparentcolor), iar în negru - toate celelalte. Pentru a sprijini acest mod, utilizați următoarele metode și proprietăți:

Procedură Mască (Transparentcoior: TColor);

proprietate MaskHandle: HBitmap;

funcția ReleaseMaskHandle: HBitmap;

În cele din urmă, cea mai importantă caracteristică a bitmapului TBitmap va fi considerată ultima. Dacă formatul de stocare este DIB, atunci este posibilă accesarea datelor de pe bitmap-ul propriu-zis:

proprietate ScanLine [Row: Integer]: Pointer;

Această proprietate este o serie de indicii pentru șiruri cu date bitmap. Parametrul ROW conține numărul liniei. Trebuie amintit faptul că, în cele mai multe cazuri linia de demarcație în bitmap sunt ordonate în memoria de jos în sus și, de fapt, primul antet este stocată după linia de jos. Codul care returnează valoarea proprietății ScanLine. acest lucru permite; astfel încât să nu vă surprindeți dacă valoarea proprietății scade odată cu creșterea parametrului ROW.

În interiorul liniei, datele sunt ordonate în conformitate cu formatul (pixelFormat). Pentru formatul pfsbit, totul este simplu - fiecare octet per linie corespunde unui pixel. Pentru formatele pfisbit și pfiebit pixel corespunde la doi octeți (16 biți în aceste date ambalate de trei canale), pf24bit - trei octeți (un octet per canal).

Acesta este modul în care se poate apela manipulatorul evenimentului onMouseMove. scoate informația luminanța zonei de stare la un anumit punct (presupunând că formatul bitmap - 8 sau 24 de biți):

Procedura TMainForm.ImagelMouseMove (Expeditor: TObject; Shift: TShiftState;

dacă nu este alocat (Imagel. Picture.Bitmap) apoi Exit;

face PixelFormat de caz

pfSbit: Statusbarl.SimpleText: = Format ( 'x: y: b: ...', [x, y, pByteArray (scanline [y]) ^ [x]]);

pf24bit: Statusbarl.SimpleText: = Format ('x :. y :. R:., G:., B:.'

[X, y, pByteArray (scanline [y]) L [3 * x], pByteArray (scanline [y]) = [3 * x + l], pByteArray (scanline [y]) = [3 * x + 2] ]);

Valoarea proprietății ScanLine nu poate fi modificată (este numai pentru citire). Dar puteți schimba datele pe care le indică. Iată cum puteți obține o imagine negativă pe 24 de biți:

Linia de var. pByteArray;

Pentru i: = 0 la Imagel.Picture.Bitmap.Height - 1 nu

Pentru j: = 0 la Imagel.Picture.Bitmap.Width * 3-1

Linia ^ [j]: = 255 - Linia ^ [j];

În Delphi, puteți întâlni "numele" obiectului în cauză - structura TBitmap. descrise în fișierul WINDOWS.PAS. Deoarece ambele aparțin aceleiași domenii, se întâmplă adesea coliziuni, ceea ce duce la erori. Amintiți-vă că, pentru a face distincția între sinonimele structurilor, trebuie să utilizați numele modulului în care sunt descrise. Prin urmare, dacă programul dvs. are module Windows și Graphics, descrieți și utilizați tipurile Windows.TBitmap și Graphics.TBitmap.

var CardsDll. THandle;

CarduriDll: = LoadLibraryEx ('cards.dll', 0, LOAD_LIBRARY__AS_DATAFILE);

În mod similar, puteți încărca bitmap-uri pentru întreaga punte. Când harta este afișată, în funcție de deschiderea sau închiderea acesteia, este desenat unul dintre obiectele TBitmap.

dacă este cunoscută atunci // cardul este deschis







Articole similare

Trimiteți-le prietenilor: