2

我阅读了与此类似的其他问题/答案,但它们要么:

  • 读/写 jpeg 文件
  • 使用 .NET

就我而言,我有一个包含 jpeg 的缓冲区(在本例中为 unsigned char*)。这意味着它看起来像这样:

FF D8 FF E0 ...

并不是

my_image.jpg

我想找到一个库来调整这个 jpeg 的大小并将输出放在另一个缓冲区中。

例子 :

SuperLibrary::resize_jpeg(jpeg_buffer, resized_jpeg_buffer, 640, 480);

甚至 :

SuperLibrary::Image my_jpeg = SuperLibray::Image(jpeg_buffer);
my_jpeg.resize(640,480);
my_jpeg.write(resized_jpeg_buffer);

另外,我想要一些非常简单的东西。CImg 起初看起来很完美,但它只能从文件中加载/保存 jpeg。(所以,请不要使用 openCV,除非你能证明我可以在不到一周的时间内通过 CVMatrix 上的文档来调整我的 jpeg 大小)

4

1 回答 1

1

ImageMagick(更具体地说,与Magick++它的绑定)将执行此操作。这里有一些 API 文档。如何做到这一点的一个例子(注意我没有编译这个来检查,所以可能有错误):

#include <Magick++.h> 
#include <iostream> 

using namespace Magick; 

int main(int argc,char **argv) 
{ 
  InitializeMagick(*argv);
  unsigned char* img_data;
  //Fill in img_data

  Blob b(img_data, image_data_len);
  Image img(b); 
  img.resize("640x480");

  Blob resized;
  master.write(resized); 

  unsigned char* img_data_resized = new unsigned_char[resized.length()];
  std::copy(resized.data(), resized.data() + resized.length(), img_data_resized);

  //Do whatever you want with resized image data...

  delete[] img_data_resized;
  return 0; 
}
于 2013-04-24T13:26:45.607 回答