, где я могу найти код для каждого отдельного шага
Если библиотека C может быть кандидатом для вас, вы должны взглянуть на jpec легкий кодер JPEG написан на C - обратите внимание, что он поддерживает только оттенки серого.
Основная функция кодирования (jpec_enc_run
) легко читать и обеспечивает каждый шаг выше через внутренние функции:
/* open = write JPEG headers */
jpec_enc_open(e);
while (jpec_enc_next_block(e)) {
/* compute the DCT for the current 8x8 block */
jpec_enc_block_dct(e);
/* quantize the DCT coefficients for the current block */
jpec_enc_block_quant(e);
/* re-order the quantized coefficients with the zig-zag pattern */
jpec_enc_block_zz(e);
/* perform entropy coding of the current block and write to the global buffer*/
e->hskel->encode_block(e->hskel->opq, &e->block, e->buf);
}
/* close = write JPEG end of image marker */
jpec_enc_close(e);
можно выполнить эти отдельные шаги по одному и производить стандартный JPEG изображение
Это не доступно из коробки с jpec, но вы должны иметь возможность модифицировать ее для этой цели довольно легко (путем разоблачения и/или адаптации внутренних функций низкого уровня).