|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre du Club
![]() Inscription : juin 2007 Messages : 203 ![]() |
Bonjour,
Je me remet au C/C++ après de longue années où je ne l'utilisais pas et évidemment je galère... j'essaye d'ouvrir des fichiers contenant un header puis une image codée en 16 bit. (ça ressemble au dicom mais c'est un peu différent c'est des fichiers .vff de chez ge). là j'en suis à essayer de lire ligne à ligne le header pour récuperer les informations. j'ai fait ça pour le moment : Code :
je sais que files est bien rempli comme il faut. il a l'air d'ouvrir input_file correctement aussi. quand je compile il me fait l'erreur : "no matching function for call to getline(FILE*&,std::string&)" j'ai essayé de changer la nature de line mais ça n'a rien changé. je comprend pas trop parce que sur internet je vois des forums où il est dit que getline s'utilise comme ça. |
||
|
|
00
|
|
|
#2 |
![]() ![]() Cyrille Network programmer Inscription : juin 2010 Messages : 1 545 ![]() |
Bonsoir,
Et pour cause, c'est input_file le problème. FILE* c'est du vieux C, pourquoi ne pas utiliser un ifstream ? Qui serait lui utilisable avec getline http://www.cplusplus.com/reference/string/getline/ |
|
|
00
|
|
|
#3 |
|
Membre chevronné
![]() ![]() Inscription : décembre 2008 Messages : 490 ![]() |
Ce n'est jamais une bonne idée de mélanger des types C et C++.
N'utilise pas de FILE*, mais plutôt des std::ifstream. Du coup le dernier getline fonctionnera, puisque qu'il attend un type C++ istream (dont ifstream hérite) et non pas un FILE*. Utilise std::cin.get() au lieu de getch(), std::cerr<<"erreur" au lieu de fprintf(stderr, "erreur"), etc. Aussi, peux-tu me dire à quoi sert starts puisque starts[i] est strictement équivalent à files[i].c_str() ? |
|
|
00
|
|
|
#4 |
|
Membre du Club
![]() Inscription : juin 2007 Messages : 203 ![]() |
merci pour vos réponses.
je reprend effectivement des bouts de vieux codes que j'avais fait il y a bien longtemps du coup c'est vrai que j'ai un peu du mal à les mettre ensemble. pour le starts et le files, je sais plus... il y a une fonction qui ne passait pas avec files du coup j'avais généré starts pour que le format concorde à ce que la fonction voulait. mais après j'ai modifié files. du coup c'est sans doute redondant maintenant oui. merci pour les infos en tout cas ! j'essaye tout ça. |
|
|
00
|
|
|
#5 | ||
|
Membre du Club
![]() Inscription : juin 2007 Messages : 203 ![]() |
j'ai un probleme avec ifstream maintenant
j'ai changé le code en ça : Code :
no matching function for call to `std::basic_ifstream<char, std::char_traits<char> >::open(std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, const std::_Ios_Openmode&)' vous avez une idée ? c'est files[i] le problème maintenant ? |
||
|
|
00
|
|
|
#6 |
|
Membre chevronné
![]() ![]() Inscription : décembre 2008 Messages : 490 ![]() |
http://www.cplusplus.com/reference/f...ifstream/open/
Comme précisé dans la doc, il faut obligatoirement un const char* en argument ; donc appeler std::string::c_str() (j'imagine que les concepteurs de la STL voulaient limiter l'interdépendance des classes). |
|
|
00
|
|
|
#7 | ||
|
Membre du Club
![]() Inscription : juin 2007 Messages : 203 ![]() |
oki
du coup maintenant ça compile, ça tourne et le problème maintenant c'est que j'ai rajouté un while pour lire toutes les lignes : Code :
comment je peux faire pour lui faire comprendre qu'à un moment donné il ne faut plus lire la ligne, mais toute l'image ? merci en tout cas déjà pour la solution au début du problème ! |
||
|
|
00
|
|
|
#8 | ||
|
Membre habitué
![]() Inscription : mars 2010 Messages : 114 ![]() |
Logiquement si tu lis une image, alors le fichier est formatté d'une certaine manière (en l'occurence le format est vff). Ainsi tu dois pouvoir trouver un champ dans le header à une position fixe indiquant le début des pixels de l'image.
Une fois cette info trouvée, il est simple de récupérer les pixels : Code :
|
||
|
|
00
|
|
|
#9 |
|
Membre du Club
![]() Inscription : juin 2007 Messages : 203 ![]() |
hum je trouve pas de champ avec indiqué l'offset.
par contre toutes les lignes qui font parti du header (donc avant l'image) comporte le signe égal, sauf la première. du coup je vais essayer de me baser là dessus. tester si y a un signe égale sur la ligne, et si non lire la suite en temps qu'image. merci en tout cas pour vos réponses ! |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com