Documente noi - cercetari, esee, comentariu, compunere, document
Documente categorii

Codarea imaginilor JAI

Codarea imaginilor JAI

Sistemul de codoare JAI suporta o mare varietate de formate de imagine pentru scrierea imaginilor spre un fisier sau spre un obiect OutputStream pentru urmatoarele procesari.

Pentru scrierea unei imagini intr-un fisier specificat, in formatul si cu parametrii de codare specificati, se foloseste operatia FileStore. Formatele suportate de operatia FileStore sunt BMP, JPEG, PNG, PNM si TIFF.

Pentru a coda o imagine spre un OutputStream in formatul specificat utilizand parametrii de codare furnizati de un parametru operatie ImageEncodeParam, se foloseste operatia Encode.

Exemplul 26. este un fragment de cod care demonstreaza utilizarea operatiilor Encode si FileStore.


Exemplul 26. Scrierea unui obiect OutputStream si a unui File

// defineste numele fisierelor sursa si destinatie

String inputFile = /img/p1.tif

String outputFile = /img/p2.bmp

// incarca imaginea de intrare

RenderedOp src = JAI.create('fileload', inputFile);


// codeaza fisierul ca si imagine BMP

FileOutputStream stream =  new FileOutputStream(outputFile);

JAI.create('encode', src, stream, BMP, null);


// stocheaza imaginea in format BMP.

JAI.create('filestore', src, outputFile, BMP, null);


Pentru a coda in format BMP se poate utiliza operatia BMP impreuna cu alti parametrii de codare (versiune BMP, modul de asezare a datelor in fisier), ceea ce se exemplifica in Exemplul 2


Exemplul 2 Codarea si scrierea in format BMP

File f;  // fisierul in care se va stoca imaginea
PlanarImage img;// imaginea sursa

// OutputStream-ul spre care se scrie
FileOutputStream fos = new FileOutputStream(f);
// clasa JAI, specifica diferiti parametrii de codare BMP
BMPEncodeParam param = new BMPEncodeParam();
// specifica versiunea BMP
param.setVersion(BMPEncodeParam.VERSION_3);
// specifica formatul de scriere a datelor de sus in jos
param.setTopDown(true);
// specifica posibilitatea de compresie a datelor
param.setCompressed(false);
// creeaza un codor BMP
ImageEncoder enc = ImageCodec.createImageEncoder(
'BMP', fos,param);
// codeaza imaginea si o scrie la OutputStream
enc.encode(img);
fos.close();

La codarea in formatul JPEG se pot specifica diferiti parametrii si diferite optiuni de codare, cum ar fi posibilitatea de eliminare a header-ului JFIF, modificarea parametrilor de codare DCT (Disrete Cosine Transform), modificarea tabelei de cuantizare, subesantionare pe orizontala si verticala, controlul compresiei si al calitatii imaginii, etc. Fragmentul de cod urmator (Exemplul 28.) exemplifica codarea unei imagini in format JPEG.


Exemplul 28. Codare JPEG

// tabela de cuatizare
private int[] qTable=new int[]= ;

File f;  // fisierul in care se va stoca imaginea
PlanarImage img;// imaginea sursa

// OutputStream-ul spre care se scrie
FileOutputStream fos = new FileOutputStream(f);
// clasa JAI, specifica diferiti parametrii de codare JPEG
JPEGEncodeParam encodeParam = new JPEGEncodeParam();
// creeaza un nou tabel de cuantizare
encodeParam.setQTable(0, 1, qTable);
encodeParam.setQTable(1, 1, qTable);
encodeParam.setQTable(2, 1, qTable);
// tabelul de cuantizare pentru datele de luminanta
encodeParam.setLumaQTable(qTable);
// tabelul de cuantizare pentru datele de crominanta
encodeParam.setChromaQTable(qTable);
// creaza un nou tabel de cuantizare si il inlocuieste pe cel existent
// si configureaza nivelul de calitate a imaginii
encodeParam.setQuality(0.87F);
// subesantionare pe orizontala aplicata pentru fiecare banda
encodeParam.setHorizontalSubsampling(0, 1);
encodeParam.setHorizontalSubsampling(1, 1);
encodeParam.setHorizontalSubsampling(2, 2);
// subesantionare pe verticala aplicata pentru fiecare banda
encodeParam.setVerticalSubsampling(0, 1);
encodeParam.setVerticalSubsampling(1, 1);
encodeParam.setVerticalSubsampling(2, 2);
// specifica intervalul de restart in Minimum Coded Units (MCU)
encodeParam.setRestartInterval(res);
// scrie doar imaginea si nu scrie tabelele (JPEG abreviat)
encodeParam.setWriteTablesOnly(false);
encodeParam.setWriteImageOnly(true);
// scrie headerul JFIF
encodeParam.setWriteJFIFHeader(true);
// creeaza  un codor JPEG
ImageEncoder encoder = ImageCodec.createImageEncoder(
'JPEG', fos, encodeParam);
encoder.encode(img); // codeaza JPEG si scrie spre OutputStream
fos.close();

In Exemplul 29. se prezinta codarea unei imagini in format PNG folosind o codare pe 16 biti si intretesere Adam


Exemplul 29. Codare PNG

File f;  // fisierul in care se va stoca imaginea
PlanarImage img;// imaginea sursa

// OutputStream-ul spre care se scrie

FileOutputStream fos = new FileOutputStream(f);

// clasa JAI, specifica diferiti parametrii de codare PNG

PNGEncodeParam param =

PNGEncodeParam.getDefaultEncodeParam(img);

// specifica numarul de biti adancime doriti

param.setBitDepth(16);

// codeaza folosind intretesere Adam7

param.setInterlacing(true);

// creeaza un codor PNG avand parametrii specificati

ImageEncoder enc = ImageCodec.createImageEncoder(

'PNG', fos, param);

// codare si scriere in fisier

enc.encode(img);

fos.close();

Exemplul urmator (Exemplul 30.) ilustreaza modul de codare si scriere intr-un fisier de format PNM, folosind un format ASCII de reprezentare a datelor.


Exemplul 30. Codare in format PNM

File f;  // fisierul in care se va stoca imaginea
PlanarImage img;// imaginea sursa

// OutputStream-ul spre care se scrie
FileOutputStream fos = new FileOutputStream(f);
// clasa JAI, specifica diferiti parametrii de codare PNM
PNMEncodeParam param = new PNMEncodeParam();
// specifica modul de codare ASCII
param.setRaw(true);
// creeaza codorul
ImageEncoder enc = ImageCodec.createImageEncoder(
'PNM', fos, param);
// codeaza imaginea apoi o scrie in fisier
enc.encode(img);
fos.close();

Exemplul 31. reprezinta un fragment de cod care codeaza o sursa Rendered in format TIFF.


Exemplul 31. Codare in format TIFF

File f;  // fisierul in care se va stoca imaginea
PlanarImage img;// imaginea sursa

// OutputStream-ul spre care se scrie
FileOutputStream fos = new FileOutputStream(f);
// clasa JAI, specifica diferiti parametrii de codare TIFF
TIFFEncodeParam param = new TIFFEncodeParam();
// scrie datele in format segmentat
param.setWriteTiled(true);
// creeaza codorul
ImageEncoder enc = ImageCodec.createImageEncoder(
'TIFF', fos, param);
// codeaza si scrie in fisier
enc.encode(img);
fos.close();

biologie

botanica






Upload!

Trimite cercetarea ta!
Trimite si tu un document!
NU trimiteti referate, proiecte sau alte forme de lucrari stiintifice, lucrari pentru examenele de evaluare pe parcursul anilor de studiu, precum si lucrari de finalizare a studiilor universitare de licenta, masterat si/sau de doctorat. Aceste documente nu vor fi publicate.