2011-04-25 1 views
1

Je vais essayer d'être clair ....la conversion d'un flux binaire en un format .png

Mon idée de projet est la suivante:

J'ai pris plusieurs algorithmes de compression que j'implémentés en utilisant C++, après que je a pris un fichier texte et lui a appliqué les algorithmes de compression que j'ai implémentés, puis appliqué plusieurs algorithmes de chiffrement sur les fichiers compressés, maintenant il me reste l'étape finale qui convertit ces fichiers chiffrés en n'importe quel format d'image (png depuis son le plus clair).

Ma question est: Comment est-ce que je pourrais transformer un train binaire en format png? Je sais que l'image aura l'air d'ordures. Je veux que le flux binaire à être converti en un format .png pour que je puisse le voir comme une image J'utilise C++, espérons quelqu'un là-bas peut me aider

(mon précédent fil qui était fermé) https://stackoverflow.com/questions/5773638/converting-a-text-file-to-any-format-of-images-png-etc-c

Merci à l'avance Help19

Répondre

1

Je pense que vous êtes mieux servi avec un bi-dimensionnelle bar code au lieu de convertir votre blob de données en une image .png. L'un des codes que vous pouvez utiliser est le QR code.

+0

n'a pas compris ce que tu dis? Je dois transférer mes données dans un format d'image (png) – Help19

2

Si vous devez vraiment stocker vos données dans un fichier PNG, il est préférable d'utiliser une bibliothèque tierce comme OpenCV pour faire le travail pour vous. OpenCV vous permettra de stocker vos données et de les enregistrer sur le disque au format PNG ou tout autre format supporté.

Le code pour ce faire ressemblerait à quelque chose comme ceci:

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

Le code ci-dessus, il est juste pour vous donner une idée sur la façon de faire ce que vous avez besoin en utilisant OpenCV.

1

Pour faire ce que vous avez en tête (stocker des données dans une image), vous aurez besoin d'un format d'image sans perte. PNG est un bon choix pour cela. libpng est la bibliothèque de codage PNG officielle. Il est écrit en C, donc vous devriez pouvoir l'interfacer facilement avec votre code C++. La page d'accueil à laquelle je vous ai connecté contient des liens vers le code source afin que vous puissiez compiler libpng dans votre projet, ainsi qu'un manuel sur la façon de l'utiliser. Quelques notes rapides sur l'utilisation de libpng:

  • Il utilise setjmp et longjmp pour la gestion des erreurs. C'est un peu bizarre si vous n'avez pas encore travaillé avec la fonctionnalité de saut en longueur de C, mais le manuel fournit quelques bons exemples.
  • Il utilise zlib pour la compression, vous devrez donc également le compiler dans votre projet.