În 1988, a fost adoptat primul standard internațional pentru comprimarea fotografiilor. A fost numit pentru grupul care a lucrat la aceasta - JPEG (Joint Photographic Expert Group). Faptul că archivers standard de (ZIP, ARJ) și algoritmi de compresie tradiționale în GIF formate, TIFF și PCX nu sunt suficient de puternice pentru a comprima imaginea în tonuri de gri sau color (cum ar fi fotografii) - un maxim de 2-3 ori. Aplicată la algoritmul de compresie JPEG poate realiza de zece ori - adevăr, iar imaginea este supusă deformare permanentă, și din detaliu este pierdut. (! Nociv) necugetat pentru a expune desene stocate în format JPEG, imagini sau orice imagine cu un număr mic de gradații - acesta este special conceput pentru imagini de calitate fotografică.
Suportul pentru formatul JPEG este implementat în Delphi prin clasa TJPEGImage, descendentă a clasei TGraphic.
Numele TJPEGImage nu are mare succes. Pentru a învăța această clasă nu are cea mai mică legătură. Mai degrabă, este un "văr" al clasei TBitmap.
Pentru acest obiect există două cerințe. Pe de o parte, trebuie să susțină compresia datelor pentru scrierea pe disc. Pe de altă parte, datele neambalate în format DIB, astfel încât sistemul să le poată extrage la cerere. Prin urmare, un obiect de clasă TJPEGimage poate stoca ambele tipuri de date, precum și să efectueze transformările lor reciproce, adică compresia și decompresia. În acest scop, oferă metode:
Este recomandat să apelați în prealabil metoda DIBNeded, înainte de a desena imaginea - aceasta va accelera procesul de afișare a acesteia pe ecran.
În plus, este util să utilizați metoda Assign, care vă permite să plasați obiectul TBitmap în clasa TJPEGimage și invers:
Aceasta convertește formatele.
Proprietățile TJPEGimage pot fi divizate în mod condiționat în două grupe: utilizate pentru comprimare și pentru decompresie.
Cea mai importantă dintre proprietățile necesare pentru compresie este compressionQuality:
tip TJPEGQualityRange = 1..100;
proprietatea CompressionQuaiity: TJPEGQualityRange;
Acesta determină calitatea imaginii comprimate și dimensiunea acesteia. Pentru valori mici ale acestei proprietăți, fișierele sunt foarte mici, dar cu distorsiuni mari (rețineți că standardul JPEG oferă compresie cu pierderea calității). La valori apropiate de 100, pierderea este invizibilă, însă dimensiunea fișierului este de asemenea maximizată.
Nu puteți anticipa dimensiunea unui fișier comprimat în avans - imaginile diferite sunt comprimate diferit, chiar și cu o valoare a CompressionQuality.
În mod implicit, valoarea acestei proprietăți este de 75, ceea ce oferă un compromis rezonabil între dimensiune și calitate.
Pe lângă CompressionQuality, calitatea afișajului poate fi afectată de proprietate
tip TJPEGPerformance = (jpBestQualitate, jpBestSpeed);
performanță proprietate: TJPEGPerformanță;
Este necesar doar atunci când despachetați și este responsabil pentru modul de restaurare a paletei de culori din informațiile comprimate. Calitatea imaginii înregistrate nu o afectează în nici un fel.
Ca și clasa TBitmap, TJPEGimage are o proprietate
tip TJPEGPixelFormat = (jf24Bit, jfSBit);
proprietate PixelFormat: TJPEGPixelForm;
Pentru obiectul considerat de valori posibile, numai două sunt jf8bit și jf24bit. Implicit este formatul pe 24 de biți. În cazul în care nu este necesară informația de culoare, este posibil să se stabilească proprietatea Grayscale la True - în acest caz, imaginea este înregistrată (sau extract) într-un tonuri de gri (256 de niveluri de gri).
Proprietățile ProgressiveEncoding și ProgressiveDisplay determină modul în care imaginea este afișată la despachetare. Prima este responsabilă de ordinea în care componentele comprimate sunt scrise în fișier. Dacă este setat la ProgressiveEncoding la True, vine în proprietate joc ProgressiveDisplay. Valoarea sa depinde de faptul dacă imaginea afișată de cel decomprimare (la valoarea reală), sau este în primul rând pe deplin neambalat, și apoi arată (la valoarea False).
tip TJPEGScale = (jsFullSize, jsHalf, jsQuarter, jsEighth);
proprietate Scară: TJPEGScale;
Experții experimentați vor pune întrebarea: de ce este? La urma urmei, puteți citi imaginea și apoi puteți reduce scara în moduri standard? Prezentarea informațiilor în fișierele JPEG este de așa natură încât este posibilă extragerea imaginii imediat la scara dreaptă. Astfel, se obține o dublă victorie - în momentul despachetării și în momentul afișării.
Imprimarea imaginilor raster poate cauza probleme în ceea ce privește potrivirea dimensiunii acesteia cu dimensiunea foii de imprimantă și rezoluția acesteia. Cele mai multe dintre ele pot fi eliminate prin examinarea exemplului furnizat cu Delphi - jpegProj. Acesta nu este în folderul \ Demos, ca de obicei, dar în folderul Help \ Examples \ Jpeg.
În concluzie, notăm că clasa TJPEGimage nu are propria pânză pentru desen - pentru aceasta, trebuie convertită în clasa TBitmap.