Clasa tbitmap - Capitolul 10
Pentru format bitmap - DIB sau DDB - proprietate responsabilă:
tip TBitraapHandleType = (bmDIB, bmDDB);
HandleType proprietate: TBitmapHandleType;
Adâncimea dorită de bitmap culoare poate fi găsit și reinstalat, modificarea valorii proprietății:
TPixelFormat = (pfDevice, pflbit, pf4bit, pfSbit, pflSbit, PF 6Bit, pf24bit, pf32bit, pfCustom!);
PixelFormat proprietate: TPixelFormat;
Modul pfDevice corespunde DDB bitmap. Adâncimea culorii de 1, 4 și 8 biți per pixel - tradițional și implică prezența unei imagini paletă. Alte moduri de îngrijire pentru depozitarea imediată a luminozității de puncte în fiecare dintre cele trei culori primare - roșu (R), verde (G) și albastru (B). Bit 15 corespunde o alocare de biți de biți 5-5-5 (RGB555), 16 biți - RGB 565, 24 de biți - RGB888. bit Mode 32 este similar cu 24 de biți, dar se adaugă suplimentar un al patrulea frânghie (canal alfa), care conține informații suplimentare cu privire la transparența fiecărui punct. Modul pfCustom este destinat pentru punerea în aplicare a propriilor modele grafice 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ă. Desigur, clasa TBitmap suportă încărcarea resursei de aplicare:
Procedura LoadFromResourcelD (Instanțà: THandle; barbotare: Integer);
Procedura LoadFromResourceName (Instanțà: THandle; ResName const: string);
Aici exemplu - este un modul sistem global variabilă care stochează un identificator unic al unei copii de funcționare a aplicației (sau bibliotecă de legături dinamice).
panza bitmap disponibile prin proprietatea:
Canvas proprietate: TCanvas;
Acesta poate fi folosit pentru a desena pe suprafața bitmap. Vă rugăm să rețineți că nici un alt descendenții TGraphic panza nu au.
Manere bitmap și paleta sunt disponibile ca proprietăți:
Mâner proprietate: HBITMAP;
Proprietate Paletă: HPALETTE;
În care se ocupă cu clasa TBitmap, ține cont de faptul că principiul „un obiect - un mâner“, din cauza mecanismului de cache este incorectă. Două metode:
Funcția ReleaseHandle: HBITMAP;
Funcția ReleasePalette: HPALETTE;
returnează un mâner la un bitmap și paleta, respectiv, și apoi se egalează cu zero descriptorii, adică. e., așa cum au fost „dat“ pentru utilizator.
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. Pentru a face acest lucru, există metode:
- Procedura Inactive - descarcă fluxul de imagine și distruge mânere bitmap și paleta;
- Procedura FreeImage - „eliberatoare“ mânerul bitmap pentru utilizarea și modificarea ulterioară. Acest lucru înseamnă că, în cazul în care mânerul are o referință, este duplicată; Hraneste eliminate.
Bitmap poate fi alb-negru și culoare care determină proprietățile:
Monocrom proprietate: Boolean;
Adevărata valoare corespunde unui bitmap monocrom. Atunci când conținutul său este schimbat, conversia la forma cerută.
Pentru transparența bitmap îndeplinesc următoarele proprietăți:
TransparentColor proprietate: TColor;
tip TTransparentMode = (tmAuto, tmFixed);
TransparentMode proprietate: TTransparentMode;
În cazul în care proprietatea este setată pe modul TransparentMode tmAuto, pentru transparent (de fundal) culoarea este luată pixelului din stânga sus. În caz contrar, culoarea este preluată din Transparentcolor de proprietate.
Bitmap poate fi folosit ca o mască pentru alte bitmap-uri. În acest caz, se transformă într-o două culori, în cazul în care alb pictat punctul de fond (a se vedea Transparentcolor proprietate.), Și negru - restul. Pentru a sprijini acest mod sunt următoarele metode și proprietăți:
Procedura Masca (Transparentcoior: TColor);
Proprietate MaskHandle: HBITMAP;
Funcția ReleaseMaskHandle: HBITMAP;
În cele din urmă, ultimul dintre contul va fi considerat un foarte important pic caracteristică hartă TBitmap. În cazul în care formatul de stocare ea - DIB, este posibil accesul la datele cele mai multe bitmap:
Scanline proprietate [Row: Integer]: pointer;
Această proprietate este o serie de indicii pentru rândurile de date bitmap. Parametrul ROW conține numărul rândului. 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, permite acest lucru; asa ca nu fi surprins dacă, prin valoarea parametrului a ROW este redusă.
linie de date în interiorul sunt aranjate în conformitate cu formatul (pixelFormat). Pentru pfsbit format este simplu - fiecare octet din șirul 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).
Ceva de genul asta ar putea arata ca un handler onmousemove eveniment, va apărea pe bara de stare informațiile despre luminozitatea unui anumit punct (presupunând că formatul bitmap - 8 sau 24 biți):
Procedura TMainForm.ImagelMouseMove (Expeditor: TObject; Shift: TShiftState;
în cazul în care nu sunt atribuite (Imagel Picture.Bitmap.), apoi Exit;
face caz de PixelFormat
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 Inutil de proprietate scanline nu poate fi modificat (este read-only). Dar puteți modifica datele la care. Asta e modul în care puteți obține o imagine negativă de 24 de biți:
line Var. pByteArray;
Pentru i: = 0 până la Imagel.Picture.Bitmap.Height - 1 do
Pentru j: = 0 până la Imagel.Picture.Bitmap.Width * 3 - 1 do
Linia ^ [j]: = 255 - Linia ^ [j];
În Delphi se poate întâlni „omonim“ a obiectului - structura TBitmap, descrisă în fișierul WINDOWS.PAS. Deoarece ambele aparțin aceluiași domeniu, există adesea conflicte care duc la erori. Să ne amintim pentru a distinge structura de sinonime, ar trebui să utilizați numele modulului în care sunt descrise. Deci, dacă programul are un modul de Windows și grafică, și apoi să descrie tipurile de băuturi Windows.TBitmap și Graphics.TBitmap.
var CardsDll. THandle;
CardsDll: = LoadLibraryEx ( 'cards.dll', 0, LOAD_LIBRARY__AS_DATAFILE);
În mod similar, puteți descărca bitmap-uri pentru întreaga punte. La afișarea hărților, în funcție de faptul dacă este deschis sau închis, unul dintre obiectele TBitmap trase:
dacă se cunoaște apoi // hartă deschis