2011-04-25 391 views
1

我會盡量明確....轉換二進制流轉換爲PNG格式

我的項目的想法是如下:

我把我用C++實現的若干種壓縮算法,是我後拿了一個文本文件,並將其應用到我實現的壓縮算法,然後在壓縮文件上應用了幾種加密算法,現在我剩下的最後一步是將這些加密文件轉換爲任何格式的圖像(我正在考慮png最清晰的一個)。

我的問題是: 如何將二進制流轉換爲png格式? 我知道圖像看起來很垃圾。 我想要的二進制數據流轉換爲一個PNG格式,所以我可以把它看作 我使用C++的圖像,希望有人在那裏可以幫助我

(我以前的線程這是封閉的) https://stackoverflow.com/questions/5773638/converting-a-text-file-to-any-format-of-images-png-etc-c

thanx提前 Help19

回答

1

我覺得你是一個兩維bar code,而不是你的數據的BLOB轉換成PNG圖像更好的服務。

您可以使用的代碼之一是QR code

+0

沒有得到你說的?我必須將我的數據轉換爲圖像格式(png) – Help19 2011-04-25 18:09:55

2

如果您確實需要將您的數據存儲在PNG中,最好使用第三方庫(如OpenCV)爲您完成工作。 OpenCV可讓您存儲數據並將其作爲PNG或其支持的任何其他格式保存在磁盤上。

代碼來執行,這將是這個樣子:

#include <cv.h> 
#include <highgui.h> 

IplImage* out_image = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, bits_pr_pixel); 

char* buff = new char[width * height * bpp]; 
// then copy your data to this buff 

out_image->imageData = buff; 

if (!cvSaveImage("fake_picture.png", out_image)) 
{ 
    std::cout << "ERROR: Failed cvSaveImage" << std::endl; 
} 

cvReleaseImage(&out_image); 

上面它只是給你如何需要使用什麼樣的OpenCV做一個想法的代碼。

1

爲了做到您的想法(將數據存儲在圖像中),您將需要無損圖像格式。對此,PNG是一個不錯的選擇。 libpng是官方的PNG編碼庫。它是用C編寫的,所以你應該可以很容易地將它與C++代碼連接起來。我鏈接到的主頁包含了源代碼的鏈接,因此您可以將libpng編譯到您的項目中,以及如何使用它的手冊。關於使用libpng的一些簡要說明:

  • 它使用setjmp和longjmp進行錯誤處理。如果你之前沒有使用C的遠程跳轉功能,這有點奇怪,但是這本手冊提供了一些很好的例子。
  • 它使用zlib進行壓縮,因此您還必須將其編譯到您的項目中。