Taie un dreptunghi din jpeg

Tăiați dreptunghiul din JPEG

Am o problemă: am nevoie pentru a descărca un fișier JPEG, se taie un dreptunghi din ea și salvați-l pe caseta de disc, în același format JPEG. Am făcut-o pentru că nava JPEG, se traduce într-un Bitmap, se taie un dreptunghi de bitmap, traduce-l într-un format JPEG și salvați, dar într-un fel nu a făcut-o într-adevăr Harashi. Pozzhskazhite pozhajlusta dacă este posibil să-l dai seama într-un fel pe altul?







AndreW777 # xA0; (17.03.06 19:55)
acest lucru nu este într-un fel foarte bun

"ce este bun și ce este rău?" (C)

Pur și simplu atunci când converti jpg-> bmp-> jpg la ultima, s-ar putea să existe zgomote care pe primul nebylo, aș vrea să scap de asta.
Vă mulțumim anticipat.

Se pretinde că codul sursă al lui Jpegcrock este disponibil gratuit pentru dezvoltatorii de software care doresc să adauge culturi JPEG fără pierderi la software-ul lor.

Nu am găsit nimic acolo. Nu mă simt bine cu engleza. Poate cineva va avea un exemplu, sau ceva în limba rusă. Mulțumesc.

În limba rusă - puțin probabil. Exemple despre Delphi, destul de ciudat, sunt (bănuiam că era doar pe C):

Mulțumesc. Dar n-am înțeles prea mult acolo. Dacă nu este greu pentru dvs. să scrieți mai exact unde să căutați, sau exemplu. Voi fi foarte recunoscător.

Acum a dispărut. Lung încercat, dar cum să-l pună în aplicare în prog pe Dolphi nu a înțeles niciodată.

Bine, ai noroc :)
Am decis că cultura fără pierderi ar veni de asemenea la îndemână și de a scrie (practic copiat de la jpegtran) aici este:







jsrcerr.trace_level: = jdsterr.trace_level;
srcinfo.mem ^ .max_memory_to_use: = dstinfo.mem ^ .max_memory_to_use;

AssignFile (input_file, SrcFName); Resetați (input_file, 1);
AssignFile (output_file, DstFName); Rescrie (output_file, 1);

Cu transformoption începe
# xA0; transform: = operație;
# xA0; trim: = Fals;
# xA0; force_grayscale: = False;
# xA0; dacã (transform = JXFORM_CUT) începe apoi
# xA0; # xA0; xoffs: = Rect.Left; yoffs: = Rect.Top;
# xA0; # xA0; newwidth: = Rect.Right - Rect.Left;
# xA0; # xA0; newheight: = Rect.Bottom - Rect.Top;
# xA0; sfârșitul;
se încheie;

# xA0; aflați, de asemenea, care set de matrice de coeficienți va menține ieșirea
dst_coef_arrays: = jtransform_adjust_parameters (@srcinfo, @dstinfo,
# xA0; # xA0; # xA0; src_coef_arrays,
# xA0; # xA0; # xA0; transformoption);


jtransform_execute_transformation (@srcinfo, @dstinfo,
# xA0; # xA0; # xA0; # xA0; # xA0; # xA0; # xA0; # xA0; # xA0; # xA0; # xA0; # xA0; src_coef_arrays,
# xA0; # xA0; # xA0; transformoption);

Dacă începe operația (JXFORM_CUT)
# xA0; k: = dstinfo.max_h_samp_factor * DCTSIZE;
# xA0; Rect.Left: = Rect.Left div k * k;
# xA0; k: = dstinfo.max_v_samp_factor * DCTSIZE;
# xA0; Rect.Top: = Rect.Top div k * k;
# xA0; Rect.Right: = Rect.Left + dstinfo.image_width;
# xA0; Rect.Bottom: = Rect.Top + dstinfo.image_height;
se încheie;

Utilizare:
1) În jconfig.inc prescribe
2) În Transupp.pas, în procedura do_transform în primele două linii înlocuiți # xA0; * DCTSIZE pentru a div DCTSIZE (eroarea a fost detectată).
3) Utilizați de fapt:
utilizări
# xA0; Transupp, hefer, jerror, jmorecfg, jpeglib, cdjpeg,
# xA0; jdatasrc; JDatadst; JCTrans; JDtrans; JdAPImin; JcAPImin;

r: = Rect (10, 10, 200, 200);
JpegTransform (SrcName, DstName, JXFORM_CUT, @ r);

B r este dată de un dreptunghi care ar dori să se taie și se întoarce ce a fost tăiat, de fapt - am coordonatele sunt aliniate orizontal cu 16 vertical în 8 (așa cum am înțeles, depinde de tipul de jpeg „a) Ie. este imposibil să se taie exact zona dată, dar în majoritatea cazurilor nu este necesară.

Mulțumesc. Totul funcționează.







Articole similare

Trimiteți-le prietenilor: