2011-04-25 388 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进行压缩,因此您还必须将其编译到您的项目中。