
= Quand?critor2000 wrote:Bientôt sur vos écrans.


= Quand?critor2000 wrote:Bientôt sur vos écrans.
JayTe wrote:Oui, mais bon la méthode de Ciwtron est quand même vachement plus simple que de devoir faire un programme à chaque fois qu'on veut un image... Et puis c'est pas mal d'avoir un truc qui fonctionne aussi sans hack, de manière "officielle"![]()
critor2000 wrote:Le problème est que l'implémentation de la méthode de Ciwtron est buggée.
Et cela n'a jamais été corrigé depuis des mois...
Ciwtron wrote:PS: SFML est disponible en Basic? Sincèrement, ça m'étonnerais.
#include iostream
#include fstream
#include string
#include SFML/System.hpp
#include SFML/Graphics.hpp
using namespace std;
unsigned int toGrey4(sf::Color col) //Convertit une couleur en niveau de gris sur 4 bits
{
unsigned int ret;
ret = (unsigned int) (0.299 * (float) col.r + 0.587 * (float) col.g + 0.114 * (float) col.b);
return ret / 16;
}
int main(int argc, char **argv)
{
std::string inURL, outURL;
sf::Image img;
cout "Entrez le chemin de l'image a convertir:" endl; //Recuperation des fichiers d'entrée /sortie
cin inURL;
cout "Entrez le chemin du fichier de sortie:" endl;
cin outURL;
if(!img.LoadFromFile(inURL.c_str())) //Verifications sur les fichiers
{
cout "Erreur: impossible d'ouvrir le fichier d'entree" endl;
return 0;
}
ifstream test(outURL.c_str(), ios::in);
if(test)
{
cout "Erreur: le fichier de sortie existe deja. Specifiez un autre nom de fichier." endl;
return 0;
}
ofstream outFile(outURL.c_str(), ios::out | ios::trunc);
if(!outFile)
{
cout "Erreur: impossible d'ouvrir le fichier de sortie" endl;
}
/// Partie a changer, pour l'instant ca recupere les pixels un à un , ca les convertit en gris et ca les met dans le fichier de sortie en respectant une syntaxe C
outFile endl "static unsigned int image_width = " img.GetWidth() ";" endl;
outFile "static unsigned int image_height = " img.GetHeight() ";" endl;
outFile "static unsigned char image[" img.GetHeight() "][" img.GetWidth() "] = {" endl;
for(unsigned int i = 0; i img.GetHeight(); i ++)
{
outFile "{";
for(unsigned int j = 0; j img.GetWidth(); j ++)
{
sf::Color c = img.GetPixel(j, i);
unsigned int g = toGrey4(c);
outFile "0x" hex g;
if(j != img.GetWidth() - 1)
outFile ",";
}
outFile "}";
if(i != img.GetHeight() - 1)
outFile ",";
outFile endl;
}
outFile "};" endl endl;
outFile.close();
return 0;
}
JayTe wrote:Perso j'utilise la SFML principalement en C++, mais elle est aussi dispo en C, Python, Ruby... après je sais pas dans quel langage tu avais commencé ton projet...
Ce qui est pratique c'est que la partie gestion des images est entièrement gérée par la SFML, pas besoin de s'embêter avec ça; et ça marche quelque soit la taille/le format des images
Voila, à partir de ça il faudrait que tu modifies les outputs pour que ça corresponde à la syntaxe d'un fichier xml que tu pourras mettre dans le tns, si tu as besoin de plus de détails demande-moi![]()
PS: pour compiler ça il faut linker avec sfml-graphics-s sfml-window-s sfml-system-s (dans cet ordre)
Dyar wrote:Depuis la version 2.0, on peut définir un niveau de gris à un point ou à un nuage de points.
Il y a 6 niveaux de gris possibles, si je me souvient bien...
JayTe wrote:Sinon si tu n'as pas envie de t'embêter avec trop de lignes de commandes, je te conseille Code::Blocks comme IDE pour le C/C++, et tu n'auras pas à en taper une seule![]()
Users browsing this forum: ClaudeBot [spider] and 3 guests