Подскажите свободно распространяемую библиотеку (совместимую с Windows) или исходник, в котором из JPEG файла выделялись квантованные косинусные коэффициенты. Это первый шаг обратного JPEG-декодирования (коды Huffman-а в DCT-коэффициенты). Я знаю алгоритм как это сделать, но очень не хочется заново изобретать велосипед и тратить время на тестирование самопальной программы.
Это можно сделать с помощью libjpeg.
Пример (отсюда: Extracting JPEG DCT coefficients):
#include <stdio.h>
#include <jpeglib.h>
#include <iostream>
using namespace std;
JBLOCKARRAY rowPtrs[MAX_COMPONENTS];
void read(jpeg_decompress_struct srcinfo, jvirt_barray_ptr * src_coef_arrays) {
//cout << "Started reading DCT" << endl;
for (JDIMENSION compNum=0; compNum < srcinfo.num_components; compNum++) {
size_t blockRowSize = (size_t) sizeof(JCOEF) * DCTSIZE2 * srcinfo.comp_info[compNum].width_in_blocks;
for (JDIMENSION rowNum=0; rowNum < srcinfo.comp_info[compNum].height_in_blocks; rowNum++) {
// A pointer to the virtual array of dct values
rowPtrs[compNum] = ((&srcinfo)->mem->access_virt_barray)((j_common_ptr) &srcinfo, src_coef_arrays[compNum],rowNum, (JDIMENSION) 1, FALSE);
// Loop through the blocks to get the dct values
for (JDIMENSION blockNum=0; blockNum < srcinfo.comp_info[compNum].width_in_blocks; blockNum++){
//...iterate over DCT coefficients
for (JDIMENSION i=0; i<DCTSIZE2; i++){
//and print them to standard out - one per line
cout << rowPtrs[compNum][0][blockNum][i] << endl;
}
}
}
}
}
int main() {
//TODO: change this to read a different file
const char* filename = "image4.jpg";
FILE * infile;
struct jpeg_decompress_struct srcinfo;
struct jpeg_error_mgr srcerr;
if ((infile = fopen(filename, "rb")) == NULL) {
fprintf(stderr, "can't open %s\n", filename);
return 0;
}
srcinfo.err = jpeg_std_error(&srcerr);
jpeg_create_decompress(&srcinfo);
jpeg_stdio_src(&srcinfo, infile);
(void) jpeg_read_header(&srcinfo, FALSE);
//coefficients
jvirt_barray_ptr * src_coef_arrays = jpeg_read_coefficients(&srcinfo);
read(srcinfo, src_coef_arrays);
jpeg_destroy_decompress(&srcinfo);
fclose(infile);
return 0;
}
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники