我尝试过关注another answer,但似乎无法做到这一点。我有大约8MiB的RBGX位图使用libjpeg-turbo转换为内存中的jpeg。如果我使用Ren "Test.txt" "161109-Mike-Smith-4719.txt"
我可以将整个内容写入文件,然后重新读取文件,就可以了。但是,尝试使用jpeg_stdio_dest
一直是个难题。我的设置与jpeg_mem_dest
完全相同,但使用jpeg_stdio_dest
似乎只进行一次4KiB分配,然后再分配更多空间。
我无法找到有关如何使用mem
的进一步说明的文档,并且可以真正使用某些方向。
jpeg_mem_dest
答案 0 :(得分:2)
是的,这根本不直观。提出jpeg_mem_dest()调整的程序员没有太多选择,扩展现有的api并不是那么容易,因为它不是为了首先支持一个功能而设计的。什么是完全不明显的是你的变量不会更新,直到之后 jpeg_finish_compress()调用。库中的相关代码是:
METHODDEF(void)
term_mem_destination (j_compress_ptr cinfo)
{
my_mem_dest_ptr dest = (my_mem_dest_ptr) cinfo->dest;
*dest->outbuffer = dest->buffer;
*dest->outsize = (unsigned long)(dest->bufsize - dest->pub.free_in_buffer);
}
注意单词" term"。该函数通过函数指针间接调用:
GLOBAL(void)
jpeg_finish_compress (j_compress_ptr cinfo)
{
//...
/* Write EOI, do final cleanup */
(*cinfo->marker->write_file_trailer) (cinfo);
(*cinfo->dest->term_destination) (cinfo);
//...
}
你无能为力。只需调整你的std :: cout代码,在循环之后移动它以适应库的工作方式。
要注意这个功能的其他细节,也不是很明显。你必须释放()它创建的缓冲区。在提供的cjpeg.c示例程序中可见,main()的结尾。