2013-04-24 167 views
2

我读到类似这样的其他问题/答案,但他们要么:调整大小从缓冲区JPEG到另一个缓冲区

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

在我的例子中,我有一个缓冲区(在这个例子中是一个无符号的char *),它包含一个jpeg。这意味着它看起来像这样:

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的请,除非你能证明我可以得到它调整我的JPEG文件,在不到一个星期的准备,虽然在CVMatrix文档)

+0

也许http://www.imagemagick.org/Magick++/是你在做什么寻找。 – Yuushi 2013-04-24 12:54:29

+0

此缓冲区是否存储压缩数据,并且您想对其应用转换,或者您想要处理像素原始数据值? – William 2013-04-24 13:44:02

+0

我不在乎操纵pixem我自己。我只需要对整个图片进行转换,不管它是如何完成的。 – Nagadum 2013-04-24 14:07:53

回答

0

ImageMagick(更具体地说,Magick++绑定的话)会做这个。有一些API文档here。如何做到这一点的一个例子(注意,我没有编译这个检查,因此可能会有错误):

#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; 
} 
+0

我会试一试。我不得不承认整个“InitializeMagick”是我不想使用ImageMagick开始的原因之一。但我想没有其他办法。 – Nagadum 2013-04-24 14:06:51