2013-04-24 158 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