9
votes

C ++ Création d'image

Je n'ai pas été programmés en C ++ pendant un moment, et maintenant je dois écrire une chose simple, mais ça me rend fou.

J'ai besoin de créer un bitmap à partir d'une table de couleurs: image de caractère [200] [200] [3];

La première coordonnée est la largeur, la deuxième hauteur, les troisièmes couleurs: RVB. Comment faire?

Merci pour une aide. Adam


7 commentaires

Quel format de fichier? Quels systèmes d'exploitation ou de bibliothèques utilisez-vous?


J'utilise Windows, une application simple Simple Studio Win32.


Vous posez des questions sur un bitmap Windows GDI ou un fichier .BMP?


Je voudrais créer un simple fichier .bmp.


OK, je vais essayer la possibilité de définir des en-têtes. Mais n'y a-t-il aucun moyen simple de créer un fichier bitmap: définir simplement les valeurs de couleur pixel et enregistrer dans le fichier?


C'est simple. Vous créez deux structures, remplissez-les avec des données, écrivez-les, puis écrivez les données pixel. La seule chose plus simple qu'un BMP est probablement un fichier PPM ou RAW.


Un peu boiteux, n'est-ce pas? Ils ont LOADBITMAP pour charger un BMP, mais rien pour sauver un.


5 Réponses :


0
votes

Je voudrais d'abord essayer de découvrir, comment le format de fichier BMP (c'est ce que vous avez signifie par un bitmap, non?) est défini. Ensuite, je convertirais le tableau en ce format et je l'imprimerais au fichier.

Si c'est une option, j'envisagerais également d'essayer de trouver une bibliothèque existante pour la création de fichiers BMP et d'utiliser simplement.

Désolé si ce que j'ai dit est déjà évident pour vous, mais je ne sais pas à quelle étape du processus que vous êtes coincé.


0 commentaires

0
votes

Il serait conseillé d'initialiser la fonction sous forme de simple matrice 1 dimension.

IE (où les octets sont le nombre d'octets par pixel) xxx

vous pouvez Ensuite, accédez à la position correspondante dans le tableau comme suit xxx


5 commentaires

Lorsque les tailles sont connues au moment de la compilation, pourquoi tout cela, que le compilateur fait automatiquement pour vous?


Oups fixe le problème d'index. Quant à pourquoi l'explicitement? De cette façon, vous obtenez une meilleure compréhension de ce qui se passe exactement. Chacun à leur propre. Personnellement, je préfère ne pas traiter le compilateur comme une boîte noire ... Si la largeur, la hauteur et les octets sont des valeurs constantes, elles seront optimisées de toute façon :)


Significativement plus facile à voir exactement ce qui se passe aussi, IMHO.


Je peux utiliser un image de caractère [largeur] [hauteur] [octets]; et savoir exactement ce qui se passe. Selon "ils seront optimisés de toute façon" semblent être la seule boîte noire ici. Et il n'est pas plus facile de voir ce qui se passe, comme il apparaît «X» est dominant sur «Y» (y compris dans votre initialisation), mais ce que vous faites réellement, c'est plus comme image [hauteur] [largeur] [largeur] [largeur] ! Cela peut conduire à des erreurs subtiles.


Chacun à leur propre. Bonne chance interprétant l'image de quelqu'un d'autre à l'aide d'un tableau 3 dimensions ...



15
votes

Je suis sûr que vous avez déjà vérifié http://fr.wikipedia.org/wiki/bmp_file_format .

Avec ces informations à la main, nous pouvons écrire un BMP rapide avec: xxx

si la configuration des en-têtes est un problème le permettez-nous.

Edit: J'ai oublié, les fichiers BMP attendent BGR au lieu de RVB, j'ai mis à jour le code (surpris que personne ne l'a attrapé).


2 commentaires

Avec la question étiquetée c ++, pas c, il serait plus agréable de voir les flux de fichiers utilisés.


Je trouve plus facile de produire des données binaires avec des fonctions de style C, mais je recommande l'approche des flux de fichiers en général.



3
votes

Je suggérerais ImageMagick , bibliothèque complète, etc.


0 commentaires

1
votes

Pour les opérations d'image simples, je recommande vivement CIMG . Cette bibliothèque fonctionne comme un charme et est extrêmement facile à utiliser. Vous devez juste inclure un fichier d'en-tête dans votre code. Il m'a littéralement pris moins de 10 minutes pour compiler et tester.

Si vous voulez faire des opérations d'image plus compliquées cependant, j'irais avec Magick ++ comme suggéré par Dagoof.


0 commentaires