이 제품에 익숙하지 않지만 jpeg 라이브러리를 사용하여 jceg에서 DC 계수를 얻어야합니까? 해당 기능이 jdhuff.c에 있다는 힌트로 들었지만 찾을 수 없습니다. 나는 jpg 라이브러리에 관해서 내가 괜찮은 기사를 찾으려고했지만 지금까지 성공하지 못했다.jpg 라이브러리를 사용하여 jpg에서 DC 계수를 얻으려면 어떻게해야합니까?
저는 여러분들이 저를 조금 도와 주며 약간의 문서 나 힌트를 주길 바랍니다. 여기 내가 아는 바가 있습니다.
jpg 사진은 8x8 블록으로 구성됩니다. 그것은 64 픽셀입니다. 그 중 63은 AC이고 1은 DC입니다. 그게 계수 야. 위치는 배열 [0] [0]에 있습니다.
하지만 jpg 라이브러리로 정확히 어떻게 읽습니까? C++을 사용하고 있습니다.
편집 : 이것은 내가 지금까지 무엇을 가지고 :
read_jpeg::read_jpeg(const std::string& filename)
{
FILE* fp = NULL; // File-Pointer
jpeg_decompress_struct cinfo; // jpeg decompression parameters
JSAMPARRAY buffer; // Output row-buffer
int row_stride = 0; // physical row width
my_error_mgr jerr; // Custom Error Manager
// Set Error Manager
cinfo.err = jpeg_std_error(&jerr.pub);
jerr.pub.error_exit = my_error_exit;
// Handle longjump
if (setjmp(jerr.setjmp_buffer)) {
// JPEG has signaled an error. Clean up and throw an exception.
jpeg_destroy_decompress(&cinfo);
fclose(fp);
throw std::runtime_error("Error: jpeg has reported an error.");
}
// Open the file
if ((fp = fopen(filename.c_str(), "rb")) == NULL)
{
std::stringstream ss;
ss << "Error: Cannot read '" << filename.c_str() << "' from the specified location!";
throw std::runtime_error(ss.str());
}
// Initialize jpeg decompression
jpeg_create_decompress(&cinfo);
// Show jpeg where to read the data
jpeg_stdio_src(&cinfo, fp);
// Read the header
jpeg_read_header(&cinfo, TRUE);
// Decompress the file
jpeg_start_decompress(&cinfo);
// JSAMPLEs per row in output buffer
row_stride = cinfo.output_width * cinfo.output_components;
// Make a one-row-high sample array
buffer = (*cinfo.mem->alloc_sarray)((j_common_ptr) &cinfo, JPOOL_IMAGE, row_stride, 1);
// Read image using jpgs counter
while (cinfo.output_scanline < cinfo.output_height)
{
// Read the image
jpeg_read_scanlines(&cinfo, buffer, 1);
}
// Finish the decompress
jpeg_finish_decompress(&cinfo);
// Release memory
jpeg_destroy_decompress(&cinfo);
// Close the file
fclose(fp);
}