Метод | Описание | |
---|---|---|
color_quantize ( byte input_buf, int in_row, byte output_buf, int out_row, int num_rows ) : void | ||
finish_pass ( ) : void | ||
my_2pass_cquantizer ( jpeg_decompress_struct cinfo ) : System |
Module initialization routine for 2-pass color quantization.
|
|
new_color_map ( ) : void |
Switch to a new external colormap between output passes.
|
|
start_pass ( bool is_pre_scan ) : void |
Initialize for each processing pass.
|
Метод | Описание | |
---|---|---|
compute_color ( box boxlist, int boxIndex, int icolor ) : void |
Compute representative color for a box, put it in colormap[icolor]
|
|
fill_inverse_cmap ( int c0, int c1, int c2 ) : void |
Fill the inverse-colormap entries in the update box that contains histogram cell c0/c1/c2. (Only that one cell MUST be filled, but we can fill as many others as we wish.)
|
|
find_best_colors ( int minc0, int minc1, int minc2, int numcolors, byte colorlist, byte bestcolor ) : void |
Find the closest colormap entry for each cell in the update box, given the list of candidate colors prepared by find_nearby_colors. Return the indexes of the closest entries in the bestcolor[] array. This routine uses Thomas' incremental distance calculation method to find the distance from a colormap entry to successive cells in the box.
|
|
find_biggest_color_pop ( box boxlist, int numboxes ) : int |
Find the splittable box with the largest color population Returns null if no splittable boxes remain
|
|
find_biggest_volume ( box boxlist, int numboxes ) : int |
Find the splittable box with the largest (scaled) volume Returns null if no splittable boxes remain
|
|
find_nearby_colors ( int minc0, int minc1, int minc2, byte colorlist ) : int |
Locate the colormap entries close enough to an update box to be candidates for the nearest entry to some cell(s) in the update box. The update box is specified by the center coordinates of its first cell. The number of candidate colormap entries is returned, and their colormap indexes are placed in colorlist[]. This routine uses Heckbert's "locally sorted search" criterion to select the colors that need further consideration.
|
|
finish_pass1 ( ) : void |
Finish up at the end of each pass.
|
|
init_error_limit ( ) : void |
Initialize the error-limiting transfer function (lookup table). The raw F-S error computation can potentially compute error values of up to +- MAXJSAMPLE. But we want the maximum correction applied to a pixel to be much less, otherwise obviously wrong pixels will be created. (Typical effects include weird fringes at color-area boundaries, isolated bright pixels in a dark area, etc.) The standard advice for avoiding this problem is to ensure that the "corners" of the color cube are allocated as output colors; then repeated errors in the same direction cannot cause cascading error buildup. However, that only prevents the error from getting completely out of hand; Aaron Giles reports that error limiting improves the results even with corner colors allocated. A simple clamping of the error values to about +- MAXJSAMPLE/8 works pretty well, but the smoother transfer function used below is even better. Thanks to Aaron Giles for this idea.
|
|
median_cut ( box boxlist, int numboxes, int desired_colors ) : int |
Repeatedly select and split the largest box until we have enough boxes
|
|
pass2_fs_dither ( byte input_buf, int in_row, byte output_buf, int out_row, int num_rows ) : void |
Map some rows of pixels to the output colormapped representation. This version performs Floyd-Steinberg dithering
|
|
pass2_no_dither ( byte input_buf, int in_row, byte output_buf, int out_row, int num_rows ) : void |
Map some rows of pixels to the output colormapped representation. This version performs no dithering
|
|
prescan_quantize ( byte input_buf, int in_row, int num_rows ) : void |
Prescan some rows of pixels. In this module the prescan simply updates the histogram, which has been initialized to zeroes by start_pass. An output_buf parameter is required by the method signature, but no data is actually output (in fact the buffer controller is probably passing a null pointer).
|
|
select_colors ( int desired_colors ) : void |
Master routine for color selection
|
|
update_box ( box boxlist, int boxIndex ) : void |
Shrink the min/max bounds of a box to enclose only nonzero elements, and recompute its volume and population
|
public color_quantize ( byte input_buf, int in_row, byte output_buf, int out_row, int num_rows ) : void | ||
input_buf | byte | |
in_row | int | |
output_buf | byte | |
out_row | int | |
num_rows | int | |
Результат | void |
public my_2pass_cquantizer ( jpeg_decompress_struct cinfo ) : System | ||
cinfo | jpeg_decompress_struct | |
Результат | System |
public start_pass ( bool is_pre_scan ) : void | ||
is_pre_scan | bool | |
Результат | void |