将二进制流转换为png格式

时间:2011-04-25 17:59:58

标签: c++ png

我会尽力清楚......

我的项目构思如下:

我采用了几种我用C ++实现的压缩算法,之后我拿了一个文本文件并应用了我实现的压缩算法,然后对压缩文件应用了几种加密算法,现在我留下最后一步了将这些加密文件转换为任何格式的图像(我正在考虑png,因为它是最清晰的)。

我的问题是: 我怎么能将二进制流转换为png格式? 我知道图像会看起来像垃圾。 我希望将二进制流转换为png格式,以便将其视为图像 我正在使用C ++,希望有人可以帮助我

(我之前关闭的帖子) https://stackoverflow.com/questions/5773638/converting-a-text-file-to-any-format-of-images-png-etc-c

提前 Help19

3 个答案:

答案 0 :(得分: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 :(得分:1)

我认为您最好使用二维bar code,而不是将您的数据blob转换为png图像。

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

答案 2 :(得分:1)

要做到您的想法(在图像中存储数据),您将需要无损图像格式。 PNG是一个很好的选择。 libpng是官方的PNG编码库。它是用C语言编写的,因此您应该能够轻松地将其与C ++代码连接起来。我链接到你的主页包含两个源代码的链接,因此你可以将libpng编译到你的项目中,以及如何使用它的手册。关于使用libpng的一些快速说明:

  • 它使用setjmp和longjmp进行错误处理。如果你以前没有使用C的跳远功能,这有点奇怪,但手册提供了一些很好的例子。
  • 它使用zlib进行压缩,因此您还必须将其编译到项目中。