begin process at 2012 02 08 09:20:26
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Application

 > CONVERTION PS EN NOIR ET BLANC

CONVERTION PS EN NOIR ET BLANC


 Information sur la source

Note :
Aucune note
Catégorie :Application Classé sous :postscript, convertion, noir blanc, ecriture fichier Niveau :Débutant Date de création :28/11/2007 Date de mise à jour :28/11/2007 09:39:57 Vu :3 501

Auteur : CerberusAbaka

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

 Description

Petit executable qui converti une liste de fichiers PostScript en noir et Blanc, ne converti que les lignes, pas les images.

Source

  • #include <cstdlib>
  • #include <iostream>
  • #include <fstream>
  • #include <iterator>
  • #include <cstring>
  • #include <vector>
  • #include <sstream>
  • void Dip_Help();
  • using namespace std;
  • bool isNumeric(const string &atester);
  • vector<string> dec( string str);
  • int main(int argc, char *argv[])
  • {
  • /**on va convertir des fichier ps - couleur en noir et blanc.
  • Comment sa marche ?
  • Dans les postScript, les coleurs des lignes (pas des images, pour ces dernieres sa ne fait rien) sont définie par :
  • # # # rgb
  • ou # # # correspond au code RGB (rouge par ex : 1 0 0 rgb)...
  • donc on recherche les rgb, on fait gaffe à ce que sa soit bien un code couleur (preceder de trois chiffres, pas de chr)
  • et on remplace par "0 0 0 rgb"
  • y a t'il des argc?
  • */
  • if ( argc == 1)
  • {
  • Dip_Help() ;
  • return 1;
  • }
  • //1° boucle sur les args :
  • int i;
  • for(i=1 ; i<argc ; i++)
  • {
  • cout << "Traitement de : " << argv[i] << endl;
  • //verification que le fichier existe :
  • ifstream file( argv[i] );
  • string line;
  • string te = "c:\\temp\\convert_.ps";
  • ofstream fp(te.c_str() , ios::out|ios::binary);
  • //fp = fopen(, "w") ;
  • while ( getline( file, line ))
  • {
  • if ( line.find("rgb") < line.size())
  • {
  • vector<string> temp = dec(line);
  • vector<string>::reverse_iterator c1_Iter;
  • c1_Iter = temp.rbegin();
  • bool modif = false;
  • int max0 = 0;
  • for (; c1_Iter != temp.rend(); c1_Iter++)
  • {
  • if (*c1_Iter == "rgb")
  • {
  • max0 = 0;
  • modif = true;
  • }else{
  • if (!isNumeric(*c1_Iter) || max0 == 3)
  • modif = false;
  • }
  • if (modif == true && *c1_Iter != "rgb" )
  • {
  • *c1_Iter = "0";
  • max0 +=1;
  • //cout << *c1_Iter << endl;
  • }
  • //la on met à jour la ligne
  • }
  • ostringstream oss;
  • copy(
  • temp.begin(),
  • temp.end(),
  • ostream_iterator<string>( oss, " " ) );
  • line = oss.str();
  • //cout << line << endl;
  • }
  • //la on ajoute la ligne au nouveaux fichier :
  • //cout << line << endl;
  • fp << line;
  • fp << "\n";
  • }
  • fp.close();
  • file.close();
  • //copy du fichier à la place du deuxieme :
  • ofstream file_ecr( argv[i] , ios::in|ios::binary );
  • ifstream fp_re(te.c_str() , ios::out|ios::binary);
  • while ( getline( fp_re, line ))
  • file_ecr << line << "\n";
  • file_ecr.close();
  • //effacement fichier temp :
  • cout << remove(te.c_str()) << endl;
  • }
  • system("PAUSE");
  • return EXIT_SUCCESS;
  • }
  • void Dip_Help()
  • {
  • cout << "Utlisation du logiciel : " << endl;
  • cout << "PS_NB.exe \"Nom_du_prmier_fichier\" \"Nom_du_deuxieme_fichier\" \"...\" " << endl;
  • }
  • vector<string> dec(string str)
  • {
  • vector<string> str_list; // liste de mots
  • // remplir la liste de mots
  • istringstream iss( str );
  • copy(
  • istream_iterator<string>( iss ),
  • istream_iterator<string>(),
  • back_inserter( str_list ) );
  • return str_list;
  • }
  • bool isNumeric(const string &atester) {
  • const char *c = atester.c_str();
  • while(*c) {
  • if ((*c<'0' || *c>'9') && *c!='.') return 0;
  • c++;
  • }
  • return 1;
  • }
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <iterator>
#include <cstring>
#include <vector>
#include <sstream>


void Dip_Help();

using namespace std;
bool isNumeric(const string &atester);
vector<string>  dec( string str);


int main(int argc, char *argv[])
{
    
    /**on va convertir des fichier ps - couleur en noir et blanc.
    Comment sa marche ?
    Dans les postScript, les coleurs des lignes (pas des images, pour ces dernieres sa ne fait rien) sont définie par :
         # # # rgb
         ou # # # correspond au code RGB (rouge par ex : 1 0 0 rgb)...
         donc on recherche les rgb, on fait gaffe à ce que sa soit bien un code couleur (preceder de trois chiffres, pas de chr)
         et on remplace par "0 0 0 rgb"
    y a t'il des argc?
    */
    if ( argc == 1)
    {
       Dip_Help()   ;
       return 1;
    }  
       //1° boucle sur les args :
    int i;
    for(i=1 ; i<argc ; i++)
    {
    cout << "Traitement de : " << argv[i] << endl;
    //verification que le fichier existe :
                   ifstream  file( argv[i] );
                   string line;
                   
                   string te = "c:\\temp\\convert_.ps";
                   ofstream fp(te.c_str() , ios::out|ios::binary);
                   
                   //fp = fopen(, "w") ;
                   
                   while ( getline( file, line ))
                   {
                        if ( line.find("rgb") < line.size())
                        { 
                        
                         vector<string> temp = dec(line);
                      
                          vector<string>::reverse_iterator c1_Iter;
                         
                          c1_Iter = temp.rbegin();
                          bool modif = false;
                          int max0 = 0;
                          for (; c1_Iter != temp.rend(); c1_Iter++)
                            {
                                 if (*c1_Iter == "rgb")
                                 {
                                 max0 = 0;
                                 modif = true;
                                 }else{
                                          if (!isNumeric(*c1_Iter) || max0 == 3)
                                          modif = false;
                                 }       
                                                                                    
                                 if (modif == true && *c1_Iter != "rgb" )
                                 {
                                 *c1_Iter = "0";
                                 max0 +=1;
                                 //cout << *c1_Iter << endl;
                                 }
                                 
                            //la on met à jour la ligne 
                            
                            }
                           ostringstream oss;
                            copy(
                                 temp.begin(),
                                 temp.end(),
                                 ostream_iterator<string>( oss, " " ) );
                                 line = oss.str();
                                 //cout << line << endl; 

                         }
                       //la   on ajoute la ligne au nouveaux fichier :
                       //cout << line << endl;
                       fp << line;
                       fp << "\n";
                     }
                     fp.close();
                     file.close();
                     //copy du fichier à la place du deuxieme :
                     ofstream  file_ecr( argv[i] , ios::in|ios::binary );
                     ifstream fp_re(te.c_str() , ios::out|ios::binary);
                     
                     while ( getline( fp_re, line ))
                           file_ecr << line << "\n";
                     
                     file_ecr.close();
                     
                     //effacement fichier temp :
                   cout <<  remove(te.c_str()) << endl; 
                      
    }
       
       
    system("PAUSE");
    return EXIT_SUCCESS;
}

void Dip_Help()
{
     cout << "Utlisation du logiciel : " << endl;
     cout << "PS_NB.exe \"Nom_du_prmier_fichier\" \"Nom_du_deuxieme_fichier\" \"...\" " << endl;
     
     
}

 vector<string>  dec(string str)
{ 

    vector<string> str_list; // liste de mots
    
    // remplir la liste de mots
    istringstream iss( str );
    copy(
        istream_iterator<string>( iss ),
        istream_iterator<string>(),
        back_inserter( str_list ) );

return str_list;
}

bool isNumeric(const string &atester) {
   const char *c = atester.c_str();
   while(*c) {
    if ((*c<'0' || *c>'9') && *c!='.') return 0;
    c++;
   }
   return 1;
  }

 Conclusion

Voila sa peut peut etre servir à quelqu'un, par contre n'hésité pas sur les commentaires sur le code en lui-même, c'est un de mes prmier, je debute...


 Historique

28 novembre 2007 09:39:57 :
fautes

 Sources de la même categorie

Source avec Zip Source avec une capture CONTACTES BOOK par mature
Source avec Zip Source avec une capture [C++/QT] SLIDEALWAYS, RÉALISEZ DES SLIDES POUR VOTRE SITE AV... par doderic
Source avec Zip Source avec une capture MAILLAGE 3D (VTK + QT) par ammoun007
Source avec Zip Source avec une capture CONVHTML : UN UTILITAIRE DE CONVERSION POUR FICHIERS HTML par pgl10
Source avec Zip SCANNER LANGAGE par lajouad

 Sources en rapport avec celle ci

Source avec Zip JEU DES PETIT CHEVAUX par flamt
Source avec une capture FACTORISATION D'UN NOMBRE par Faibbus
CONVERTIR CHEMIN RELATIF EN CHEMIN ABSOLUE (POUR DISQUE DUR) par darkpoulpo
OBTENIR L'ETAT DES BITS QUI COMPOSENT UN OCTET (CONVERSION X... par TanKu

Commentaires et avis

Commentaire de ndubien le 29/11/2007 14:34:04

Ma question va sans doutes paraître bête mais qu'est-ce qu'un PostScript?

Commentaire de CerberusAbaka le 29/11/2007 16:41:27

Ba un .ps, l'ancetre du pdf.
Les librairie comme GostScript utilise ce format. Il sert à l'impression surtout, c'est vrai qu'il existe depuit fort lontemp, mais il est encore trés utilisé (enfin je pense lol).

have a nice day

Commentaire de SAKingdom le 29/11/2007 17:19:59

if (*c1_Iter == "rgb")
if (modif == true && *c1_Iter != "rgb" )

Ça n'inquiète personnes ces deux ligne ci dessus ?

Commentaire de darunia le 29/11/2007 18:19:31

Je confirme, le format PS est très utilisé en entreprise (surtout pour les impressions de masse)

Commentaire de ndubien le 29/11/2007 18:25:40

Donc le .ps c'est "l'ancêtre" du .pdf... Merci pour ta réponse CerberusAbaka, A+

Commentaire de CerberusAbaka le 30/11/2007 08:19:14

if (*c1_Iter == "rgb")
if (modif == true && *c1_Iter != "rgb" )

Ça n'inquiète personnes ces deux ligne ci dessus ?

Sa devrai? Je suis la pour apprendre, argumenter.

en fait, on parcour la ligne à l'envert (for (; c1_Iter != temp.rend(); c1_Iter++))
si on tombe sur un "rgb", c'est que les valeur qui vienne sont suceptible d'être modifiées.

Mais il y a des cas ou il ne faut pas (par exemple si il y a des image dans le fichier, on peut avoir un "rgb", mais si on modifie les valeurs... ba sa marche pas forcement)

La regle c'est : "si RGB, modifie les 3 valeur numeric qui precede"



"Donc le .ps c'est "l'ancêtre" du .pdf... Merci pour ta réponse CerberusAbaka, A+"
Oui, je suis dans une boite de mecanique, on fait des plans et on s'en sert ennormement; en fait le pdf, c'est du postscript encapsulé.

Commentaire de SAKingdom le 30/11/2007 18:20:45

On ne test jamais une chaine de caractère ainsi. Une chaine de caractère, dans un code compiler, sera transformé en une adresse pointant vers la zone contenant la chaine. Ce que tu fais revient à tester 2 adresses mémoire différentes. La condition ne sera jamais vrai.

Pour tester une chaine, on compte le nombre de caractères rencontrés jusqu'à tomber sur le 0 de fin de chaine. C'est ce que fais la fonction strcmp.

Commentaire de SAKingdom le 30/11/2007 19:14:49

"on compte le nombre de caractères rencontrés jusqu'à tomber sur le 0 de fin de chaine."

Oups. Ça c'est pour strlen.
Pour tester deux chaines, on compare chacun des caractères de la chaine 1 avec ceux de la chaine 2.

Commentaire de CerberusAbaka le 03/12/2007 08:20:41

OK, j'ais commencé en VB, sa doit vennir de la ;)
Pourtant sa marche, c1_inter est un iterateur, pour acceder a sa valeur je suis obliger de passer par *, le fait que ce soit un std::string et non un *char ne change pas la facon de comparer?

Commentaire de SAKingdom le 03/12/2007 17:54:10

On ne peut même pas faire ça en Java alors en C++...

Commentaire de SAKingdom le 03/12/2007 21:47:21

Si c'est une classe string, il doit surement exister une méthode pour faire une comparaison.
string.compare je crois.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Convertion ASCII??? [ par BlackWizzard ] comment convertir un caractere en ascii et vice versa?pas de chichi dans le code stp!je veux juste la fonction, sans suplement!merci!!! convertion CString à char[ ]! [ par souaisou ] comment convertir de cstring a une chaine de caracteres et d'un chaine de caractere a un cstring....Merci probleme de convertion en c++6 [ par nubis ] je n'arrive pas a trouver une fonction qui convertisse directement une variable int en binaire(peut etre qu'elle n'existe pas!c pkoi je vous le demand convertion hexa->decimal [ par theflucke ] hello,je programme en C++ et je dois faire une methode qui doit convertir un champ AnsiString dont la donnee est en hexa, en decimalqqun peut m'aider? Convertion "15"(string) --> 15(int) [ par crocejf2000 ] (Re)SalutIl faut que je test ma chaine et que je la convertisse si je peut. Avec atoi("12"), ca me donne bien 12, mais si je fait un atoi("12hach"), c Convertion d'une string en char [ par redpooka ] Voici avec ce programme ca n'affiche juste le premier charactère comment faire pour qu'il affiche toute la chaine de caracètre ?Merci#include &lt;iost pb de convertion avec un vieux borland c++ [ par myogtha ] j'ai un probléme en cour j'utilise une version plus ancienne que ma 5.01 et lorsque je compile mon prog il me dis :graphic.h(50,22):convertion may los convertion d'ip [ par zebrahead ] j'aimerai savoir comment convertir, une adresse ip de la base 10 a la base 2, parceque faire la convertion d'un chiffre "normal" ca passe mais je n'ar convertion char* en int [ par sampq ] Je recupere à partir d'une requete sql un char* que je veux utiliser par la suite dans une boucle for de mon programme, mais la il faudrait que ça soi Convertion [ par LordBob ] Bonjours a tous,voila j'ai une question... vous connaissez VLC, un lecteur multimedia puissant Open Source... voila je voudrais le porter sur Dreamcas


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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 : 1,264 sec (4)

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