开发者

converting a binary stream into a png format

开发者 https://www.devze.com 2023-02-28 09:17 出处:网络
I will try to be clear .... My project idea is as follow : I took several compression algorithms which I implemented using C++, after that I took a text file and applied to it the compression algori

I will try to be clear ....

My project idea is as follow :

I took several compression algorithms which I implemented using C++, after that I took a text file and applied to it the compression algorithms which I implemented, then applied several encryption algorithms on the compressed files, now I am left with final step which is converting these encrypted files to any format of image ( am thinking about png since its the clearest one ).

MY QUESTION IS : How could I transform a binary stream into a png format ? I know the image will look rubbish. I want the binary stream to be converted to a an png format so I can开发者_开发百科 view it as an image I am using C++, hope some one out there can help me

( my previous thread which was closed ) https://stackoverflow.com/questions/5773638/converting-a-text-file-to-any-format-of-images-png-etc-c

thanx in advance Help19


If you really really must store your data inside a PNG, it's better to use a 3rd party library like OpenCV to do the work for you. OpenCV will let you store your data and save it on the disk as PNG or any other format that it supports.

The code to do this would look something like this:

#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);

The code above it's just to give you an idea on how to do what you need using OpenCV.


I think you're better served with a bi-dimensional bar code instead of converting your blob of data into a png image.

One of the codes that you could use is the QR code.


To do what you have in mind (storing data in an image), you'll need a lossless image format. PNG is a good choice for this. libpng is the official PNG encoding library. It's written in C, so you should be able to easily interface it with your C++ code. The homepage I linked you to contains links to both the source code so you can compile libpng into your project as well as a manual on how to use it. A few quick notes on using libpng:

  • It uses setjmp and longjmp for error handling. It's a little weird if you haven't worked with C's long jump functionality before, but the manual provides a few good examples.
  • It uses zlib for compression, so you'll also have to compile that into your project.
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号