begin process at 2012 05 27 20:01:43
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

API

 > IMPRIMEUR D'IMAGES BMP (API)

IMPRIMEUR D'IMAGES BMP (API)


 Information sur la source

Note :
9,8 / 10 - par 5 personnes
9,80 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :API Classé sous :impression, image, bitmap, bmp, resize Niveau :Débutant Date de création :11/09/2005 Vu / téléchargé :16 782 / 1 482

Auteur : racpp

Ecrire un message privé
Commentaire sur cette source (22)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Suite à une question dans le forum, voici un code source montrant comment imprimer des images BMP. Le programme permet de charger des images BMP, de les déplacer dans une zone ressemblant à une page blanche, de les redimensionner ,de les supprimer et enfin les imprimer. Pour redimensionner une image il suffit, quand elle est sélectionnée, de mettre le curseur dans son coin bas à droite, cliquer puis déplacer la souris dans le sens voulu. J'ai voulu perfectionner le programme en permettant le réglage des marges non imprimables de la page mais ça me demandera assez de temps pour faire des tests car mon imprimante est en panne. Je mettrai cette option dans un prochain programme permettant d'imprimer aussi les images JPG, GIF et ICO. Le code source est réalisé sous Visual C/C++ 6. Il compile aussi sous Dev-C++ 4.9.9.2. Testé sous Windows XP et une imprimante HP. J'attends vos commentaires, remarques, questions ou bogues trouvés.



 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip Source avec une capture SOUS-CLASSEMENT DE FENÊTRE D'UN AUTRE PROCESS PAR INJECTION ...
Source avec Zip Source avec une capture FENÊTRE FLOTTANTE SANS FOCUS (WIN32 API)
Source avec Zip Source avec une capture SERVICE WINDOWS DANS UNE DLL LANCÉ PAR SVCHOST.EXE
Source avec Zip Source avec une capture IMPRESSION EN WIN32 API AVEC OPTIONS
Source avec Zip Source avec une capture INFOTIP SHELL EXTENSION (BULLE DE L'EXPLORATEUR WINDOWS) (WI...

 Sources de la même categorie

Source avec Zip WIN32 TLS LENT par dguilmain
Source avec Zip VIDER ELEMENTS DE CORBEILLE WINDOWS7 (WIN64) par BruNews
Source avec Zip Source avec une capture FIND TEXT (WIN64) par BruNews
Source avec Zip DELETE DIRECTORY (WIN64) par BruNews
Source avec Zip ENUM DIRECTORY (WIN64) par BruNews

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture GENERE BMP par lajouad
Source avec Zip Source avec une capture ID3 TAG COVER ALBUM IMAGE par nanonavich
Source avec Zip QUICKSEE 1.0 par f_l_a_s_h_b_a_c_k
Source avec Zip AFFICHER IMAGE PAR COM (WIN32) par BruNews
Source avec Zip Source avec une capture AFFICHER UNE BITMAP DANS UNE FENETRE WINDOWS [WIN32,WINGDI32... par wina

Commentaires et avis

Commentaire de vecchio56 le 11/09/2005 19:43:50 administrateur CS

Enfin une source qui traite de l'impression. Je crois bien que c'est la seule ici. Pas le temps de regarder le source pour le moment, mais je prendrai le temps de le faire plus tard
Merci

Commentaire de racpp le 11/09/2005 19:51:50 administrateur CS

Je viens de remarquer que j'ai oublié de supprimer l'objet (PEN) "pointilles" avant de quitter le programme. Il est donc préférable de d'ajouter ceci dans le traitement du message WM_CLOSE:
case WM_CLOSE:
//.....
DeleteObject(pointilles);
//...
return 0;
J'aimerais aussi préciser que le nombre maximal d'images à mettre dans une seule page est limité à 5 dans le programme. Vous pouvez le modifier bien sûr:
#define nombre 10 // par exemple

Commentaire de DeAtHCrAsH le 14/09/2005 10:21:46

Interressant ton source.
Le code a l'air bien. Il est vrai que ce genre de source se font rare sur le site.

Commentaire de boumarsel le 19/09/2005 15:08:16

au lieu d'utiliser ton imprimante pour faire les tests, suffit d'installer adobe acrobat qui installe une imprimante vertuelle, ainsi tes fichiers seront imprimés en fichier pdf que tu peux visualiser.
une idée juste une idée

Commentaire de racpp le 19/09/2005 15:54:28 administrateur CS

BOUMARSEL >> Oui, j'avais fait les premiers tests avec "PDF printer" mais ce n'était pas bon car il ne prend pas en compte le format A4 européen. En plus, il ne comporte pas de marges non imprimables et ne fonctionne pas correctement avec certaines fonctions API. C'est pour cela que j'ai préféré une imprimante. Merci quand-même.

Commentaire de boumarsel le 19/09/2005 16:07:21

c'est ce que j'utilisais quand je developpais une application de gestion pour une entreprise et ça a ete tres pratique et economique et j'obtenais les meme resultats quand je fais les tests par une impression reel en format A4.le composant qui s'installe c'est acrobat distiller si je me rappelle bien.

Commentaire de bilal le 20/09/2005 22:19:34

salut,

voila j'ai develloper un soft sous builder 5.0 c,c++

je crée un genre de coupon avec uniquement des textes a l'interieur, on va dire genre carte de visite; jai fait une option qui me permet de choisir le nombre de carte que je veux imprimer sur une meme feuille , max 14 par feuilles , la tout va bien, en imprimant je voyai comme resultat que c'est trop petit ou trop grand donc j'ai fini par trouver les bonnes coordonnées pour l'impression "x1 y1 x2 y2" , ca sort impec sur mon imprimante mais des que je passe sur une autre imprimante !! tout es decallés , faut ke je mette chaque fois des coordonné propre a l'impprimante qui sera utilisé ! ya surment un moyen pour redimenssionner comme dans cette exemple de RACPP; j'utilise les canvas et sous builder , qqn serais m'aider ? je le retrouve

merci d'avance
les prog.

Commentaire de racpp le 21/09/2005 16:24:20 administrateur CS

Salut,
BOUMARCEL >> Je ne connaissais pas ce "Acrobat Distiller". Après des recherches sur le net j'ai appris qu'il permet effectivement de créer des fichier PDF en imprimant sur une imprimante virtuelle. Il parait qu'il est excellent. Malheureusement, il n'est pas gratuit. Je le trouve même cher car il semble être destiné aux professionnels qui créent des documents PDF de grande qualité. Il n'existe pas de version gratuite?
BILAL >> Le nombre de points d'une page est beaucoup  plus grand que le nombre de pixels de l'écran. Pour le format A4 européen avec une résolution de 600dpi, la page a une largeur de 4960 points et une hauteur de 7015 points. Les coordonnées d'une image ou autre doivent donc être calculés en points et non en pixels. La zone imprimable est toujours inférieure à la taille de la page réelle car il y'a des marges non imprimables de chaque coté de la feuille. Et ces marges diffèrent d'une imprimante à l'autre. La fonction API GetDeviceCaps() nous permet de retrouver tous les paramètres d'une page d'une imprimante. Elle retourne un int qui contient la valeur cherchée en points. Son premier paramètre est le HDC de l'imprimante. Son deuxième paramètre spécifie ce qu'on cherche. Exemples:
int resolutionx=GetDeviceCaps(pDC,LOGPIXELSX);
int resolutiony=GetDeviceCaps(pDC,LOGPIXELSY);
En génaral, la résolution horizontale et certicale sont les mêmes (600 points par pouce).
int largeurpage=GetDeviceCaps(pDC,PHYSICALWIDTH);
int hauteurpage=GetDeviceCaps(pDC,PHYSICALHEIGHT);
int largeurimprimable=GetDeviceCaps(pDC,HORZRES);
int hauteurimprimable=GetDeviceCaps(pDC,VERTRES);
int margegauche=GetDeviceCaps(pDC,PHYSICALOFFSETX);
int margehaute=GetDeviceCaps(pDC,PHYSICALOFFSETY);
Les marges droite et basse sont déterminées par la largeur et la hauteur de la zone imprimable.
Grâce à toutes ces valeurs, tu peux calculer correctement les dimensions et les emplacements de tes images sur le papier. Je n'ai jamais utilisé de canvas mais je pense qu'il doit avoir  une méthode du genre GetDeviceCaps().

Commentaire de victorcoasne le 04/10/2005 22:06:49

Bonjour,
J'ai pas eu le temps de regarder mais Warnings sous Dev :

ImprimeurBMP.cpp: In function `LRESULT WndProc(HWND__*, UINT, WPARAM, LPARAM)':
ImprimeurBMP.cpp:138: warning: missing initializer for member `tagBITMAP::bmWidth'
ImprimeurBMP.cpp:138: warning: missing initializer for member `tagBITMAP::bmHeight'
ImprimeurBMP.cpp:138: warning: missing initializer for member `tagBITMAP::bmWidthBytes'
ImprimeurBMP.cpp:138: warning: missing initializer for member `tagBITMAP::bmPlanes'
ImprimeurBMP.cpp:138: warning: missing initializer for member `tagBITMAP::bmBitsPixel'

ImprimeurBMP.cpp:138: warning: missing initializer for member `tagBITMAP::bmBits'
ImprimeurBMP.cpp:139: warning: missing initializer for member `tagRECT::top'
ImprimeurBMP.cpp:139: warning: missing initializer for member `tagRECT::right'
ImprimeurBMP.cpp:139: warning: missing initializer for member `tagRECT::bottom'

Sinon c'est bien de parler d'impression

Commentaire de racpp le 07/10/2005 20:15:06 administrateur CS

Victorcoasne >> Tu as quelle version de Dev-C++ ? Moi j'ai la version 4.9.9.2 et je n'ai aucun warning.

Commentaire de victorcoasne le 08/10/2005 11:02:46

J'ai la 4.9.9.2 .
Voici les logs :
Compilateur: Default compiler
Building Makefile: "D:\C++\astuces\ImprimeurBMP\Makefile.win"
Exécution de  make clean
rm -f ImprimeurBMP.o  ImprimeurBMP.exe

g++.exe -c ImprimeurBMP.cpp -o ImprimeurBMP.o -I"C:/Dev-Cpp/lib/gcc/mingw32/3.4.2/include"  -I"C:/Dev-Cpp/include/c++/3.4.2/backward"  -I"C:/Dev-Cpp/include/c++/3.4.2/mingw32"  -I"C:/Dev-Cpp/include/c++/3.4.2"  -I"C:/Dev-Cpp/include"  -D__GNUWIN32__ -W -DWIN32 -DNDEBUG -D_WINDOWS -D_MBCS

ImprimeurBMP.cpp: In function `LRESULT WndProc(HWND__*, UINT, WPARAM, LPARAM)':
ImprimeurBMP.cpp:138: warning: missing initializer for member `tagBITMAP::bmWidth'
ImprimeurBMP.cpp:138: warning: missing initializer for member `tagBITMAP::bmHeight'
ImprimeurBMP.cpp:138: warning: missing initializer for member `tagBITMAP::bmWidthBytes'
ImprimeurBMP.cpp:138: warning: missing initializer for member `tagBITMAP::bmPlanes'
ImprimeurBMP.cpp:138: warning: missing initializer for member `tagBITMAP::bmBitsPixel'

ImprimeurBMP.cpp:138: warning: missing initializer for member `tagBITMAP::bmBits'

ImprimeurBMP.cpp:139: warning: missing initializer for member `tagRECT::top'
ImprimeurBMP.cpp:139: warning: missing initializer for member `tagRECT::right'
ImprimeurBMP.cpp:139: warning: missing initializer for member `tagRECT::bottom'

g++.exe ImprimeurBMP.o  -o "ImprimeurBMP.exe" -L"C:/Dev-Cpp/lib" -mwindows -lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -luuid -lodbc32 -lodbccp32

Exécution terminée
Compilation OK

Commentaire de vecchio56 le 08/10/2005 11:41:47 administrateur CS

On n'a pas a tenir compte de ces warnings car on sait que les champs non initialisés sont mis a zéro, ce qu'on veut effectivement faire ici

Commentaire de vecchio56 le 08/10/2005 11:42:35 administrateur CS

Et puis les warnings peuvent dépendre de la version de mingw, mais pas de celle de Dev-C++ évidemment

Commentaire de bilal le 24/10/2005 23:18:38

personne m'a repondu !! ben je fairai une option de calibrage alors, comme une page de teste pour configuration.

merci ;-)

Commentaire de inddzen le 29/10/2005 18:45:24

Très bonne ressource, j'ai déjà developpé un code similaire mais moins consistant :)
Il y a cependant une question qui turlupine :
Supposons que l'on veuille imprimer une bitmap sur une page sans laisser de marges, comment faire?
J'ai fais plusieurs tests mais j'y arrive pas; alors si quelqu'un a une idee ;)

Commentaire de victorcoasne le 14/01/2006 12:23:06

Re,

Cette source vaut bien un 10/10 sans doute !

Comment passer en mode paysage ?

Bonne prog,
@++

Commentaire de racpp le 27/01/2006 13:49:54 administrateur CS

Salut,
Désolé pour ce retard car j'étais occupé par un projet.
INDDZEN >> Pour imprimer sans laisser de marges, je pense qu'il est possible de faire comme ceci:
- Donner une valeur négative au 2e paramètre de la fonction StretchDIBits() pour que l'impression commence à gauche de la zone imprimable.
- Donner une valeur négative au 3e paramètre pour que l'impression commence au dessus de la zone imprimable.
- Donner une valeur supérieure à la largeur de la zone imprimable au 4e paramètre  pour que l'impression dépasse horizontalement le cadre d'impression.
- Donner une valeur supérieure à la hauteur de la zone imprimable au 5e paramètre  pour que l'impression dépasse verticalement le cadre d'impression.
A toi de faire les tests nécessaires pour trouver les bonnes valeurs.
VICTORCOASNE >> Pour imprimer en mode paysage, je pense qu'il est également possible de jouer sur les 2e,3e,4e et 5e paramètres de la fonction StretchDIBits().
Tu peux ajouter dans ton code une fonction qui se charge de la conversion des coordonnées normales en coordonnées pour mode paysage.

Commentaire de jul41 le 27/04/2006 17:55:33

Salut Racpp!
j'ai plein d'erreurs en compilant sous Dev-C++ 4.9.9.2, du genre:

[Linker error] undefined reference to 'GetObjectA@12'
[Linker error] undefined reference to 'CreateCompatibleDC@4'
...

J'ai aussi essayé avec Visual C++6.0 mais il me met:

error C2065: 'GetDefaultPrinter' : undeclared identifier

Sais-tu comment les corriger?
merci d'avance.

Commentaire de racpp le 28/04/2006 02:43:20 administrateur CS

Salut,
jul41 > Pour Dev C++ tu dois ajouter -lgdi32 aux options de l'éditeur de lien.
Pour Visual C++ 6, le #define _WIN32_WINNT 0x0500 permet justement au compilateur de reconnaitre cette fonction qui n'est supportée que dans Windows 2000 et supérieur. Si malgré ce define ton compilateur refuse de la reconnaitre alors tu dois télécharger le dernier Platform SDK pour avoir les fichiers include récents.

Commentaire de wxccxw le 24/08/2006 18:03:45

vraiment cool, je chercher sa !
sinon, sympa la photo dans le screen, je ne te connaisait pas sous cette angles ^^

Commentaire de jpiquemal le 17/10/2006 14:30:07

Bonjour
Code très utile :-)
Une amélioration: pour avoir à l'écran une imagette parfaite (enfin... presque) il faut ajouter, avant le StretchBlt, la ligne suivante:

SetStretchBltMode(hdc, COLORONCOLOR);

Jean

Commentaire de CChargy le 18/10/2006 20:43:11

Bonjour,

Je crois que j'ai la réponse à cette question, mais je vérifie. Cette fonction est-elle compatible avec Linux ou est-ce une source uniquement pour Windows ?
Voila si vous connaissez un moyen d'imprimmer des images sur Windows ET Linux ???
Merci d'avance

Colin CHARGY

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Charger un BMP avec une OpenFileDialog et l'afficher dans un pictureBox . [ par Dragoon ] Bonjour à tous,Je ne suis pas un spécialiste du C++ et des MFC et je souhaiterais comprendre ce qui ne va pas dans mon programme.Je voudrais que celui chargement dynamique d'image (bitmap ?) [ par Gendal67 ] Bonsoir,J'aimerai savoir si une application peut charger autre chose qu'une image bmp comme une image jpg....genre comme :BMP BITMAP DISCARDABLE "lol. Convertion d'un bitmap 8 bits en un bitmal 24 bits [ par SauCisS ] Bonjour, J'ai parcouru ce forum pour chercher ma réponse, mais sans succès. Alors voici mon problème : Comment à partir d'une Redimensionnement image Borland C++ [ par jfouquet ] Bonjour, Je travaille actuellement sous Borland C++ 5. Je suis amené à afficher une image (jpeg,bmp,ico…) dans un TImage bon ça redimenssion image avec hbitmap [ par glipper ] bonjour,j'ai reussi à charger une image depuis un fichier, et la faire apparaître dans un boutons (dans une dialogbox). J'ai donc procédé comme ceci : Problème impression image [VC++ et MFC] [ par phantom_2005 ] Bonjour à tous, j'ai un problème avec l'impression d'une image.Voici mon code:   CBitmap  *Bmp                 = NULL;   SIZE  CadreDest;   HBITMAP  g faire defiler une image dans un control [ par yag00 ] bonjour,je voudrais faire defiler un bitmap chargé dans un cstatic à l'aide d'un scrollbar horizontal et vertical//m_BMP variable correspondant à mon Impression d'une image [ par eagleseyes ] Je fait un programme qui desine dans un objet TImage et je souhaiterais imprimer son contenu mais je me retrouve avec un dessin minuscule sur le papie Masquer ou afficher la console avec MFC [ par PierLab ] Bonjour à tous,Tout d'abord je remercie toute la communauté de programmeurs qui fait vivre ce site, car sans vous je n'irais pas très loin, le forum m adapter l'image à la taille du bouton [ par ndubien ] Bonjour,Je cherche à mettre une image sur un bouton qui s'adapte automatiquement dés que la taille du bouton change.Tout d'abord cette opération est-e


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,468 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales