Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ libjpeg jpeg_write_系数_C++_Image Processing_Libjpeg - Fatal编程技术网

C++ libjpeg jpeg_write_系数

C++ libjpeg jpeg_write_系数,c++,image-processing,libjpeg,C++,Image Processing,Libjpeg,我已经创建了自己的DCT计算 如何使用jpeg\u write\u系数使用jpeg\u write\u系数(需要jvirt\u barray\u ptr*coef\u数组)将64个DCT值写入jpeg文件 如何创建此功能?查找请求\u virt\u barray函数(在jmemmgr.c中) 也看看这个。它读取DCT系数而不是写入它们,但它应该让您了解系数数组的存储方式。除了系数之外,还需要传入量化表(通过j_compress\u ptr cinfostruct)。这是因为在libjpeg库中,

我已经创建了自己的DCT计算

如何使用
jpeg\u write\u系数
使用
jpeg\u write\u系数
(需要
jvirt\u barray\u ptr*coef\u数组
)将64个DCT值写入jpeg文件


如何创建此功能?

查找
请求\u virt\u barray
函数(在
jmemmgr.c
中)

也看看这个。它读取DCT系数而不是写入它们,但它应该让您了解系数数组的存储方式。除了系数之外,还需要传入量化表(通过
j_compress\u ptr cinfo
struct)。这是因为在libjpeg库中,前向DCT和量化是一步完成的。如果你想自己做正向DCT,你也必须自己做量化


还值得阅读libjpeg文档。它很长,但实际上可读性很强,将极大地提高您对该库的理解。最有用的文件是
structure.txt
。它有关于内存管理和编码器结构的部分,可能会对您有所帮助。

您可以按照
jpeg\u read\u coverties
创建dct系数管理器的结构,例如

:dstInfo->mem->alloc_small,dstInfo->mem->request_virt_barray,dstInfo->mem->realize_virt_数组


并使用
virt_barray_list
获取dst目标,将新的dct系数/quantyTableQ放入其中。然后调用jpeg_write_coverties生成jpeg文件。

您需要系数数组作为输入,以变量类型
jvirt_barray_ptr
的形式写入文件。您可以通过从图像读取来填充它,然后

jvirt_barray_ptr*coefs_array=jpeg_read_系数(&cinfo)

或者自己填。然后你必须像这样写你的dct输入数据。在下面的函数中,我使用了
jpeg\u decompress\u struct
作为输入,将我的第一个图像头用作输出图像头

int write_jpeg_file_dct(std::string outname,jpeg_decompress_struct in_cinfo, jvirt_barray_ptr *coeffs_array ){

    struct jpeg_compress_struct cinfo;
    struct jpeg_error_mgr jerr;
    FILE * infile;

    if ((infile = fopen(outname.c_str(), "wb")) == NULL) {
      fprintf(stderr, "can't open %s\n", outname.c_str());
      return 0;
    }

    cinfo.err = jpeg_std_error(&jerr);
    jpeg_create_compress(&cinfo);
    jpeg_stdio_dest(&cinfo, infile);

    j_compress_ptr cinfo_ptr = &cinfo;
    jpeg_copy_critical_parameters((j_decompress_ptr)&in_cinfo,cinfo_ptr);
    jpeg_write_coefficients(cinfo_ptr, coeffs_array);

    jpeg_finish_compress( &cinfo );
    jpeg_destroy_compress( &cinfo );
    fclose( infile );

    return 1;
}

我需要自己按顺序执行这些方法吗?请求->分配->实现?这个问题解决了吗?互联网上根本没有一个例子说明如何从原始数据生成这些数组结构,而不是仅仅使用我们从“读取系数”函数得到的数组结构??