IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

Afficher une image


Sujet :

MFC

  1. #1
    Membre confirmé Avatar de Luffy Duck
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 165
    Par défaut Afficher une image
    Salut tout le monde

    j'ai un petit souci concernant l'affichage d'une image dans une boite de dialogue. En fait, l'image est stockée en binaire dans une base de données SQL Server, je récupères les données, jusque-là pas de problème.

    Mais après, comment puis-je l'afficher ? Je n'ai rien trouver sur le net, quel contrôle utiliser, est-ce qu'on est obligé de créer un fichier jpg pour faire le lien ensuite...

    Merci de vos réponses

  2. #2
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 288
    Billets dans le blog
    2
    Par défaut
    Ton image est stockée sous quel format? bmp, jpg, gif, ...?

    Sinon, jettes un coup d'oeil sur la faq

  3. #3
    Membre confirmé Avatar de Luffy Duck
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 165
    Par défaut
    Je stocke l'image au format jpeg. En effet la classe CPicture a l'air bien, la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BOOL LoadPictureData(BYTE* pBuffer, int nSize);
    doit me permettre de charger directement les données.

    Je teste ça et je reviens donner le verdict !

    Merci

  4. #4
    Membre confirmé Avatar de Luffy Duck
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 165
    Par défaut
    Par contre j'ai un autre petit problème...

    Je récupère les données de l'image dans un CString, je l'ai affiché et c'est en hexa.

    Pour la fonction, j'ai besoin de passer un BYTE *, donc comment je peux faire la conversion ?

  5. #5
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    tu peux utiliser GetBuffer(0) a caster en BYTE * ou l'operateur const char * a caster en BYTE *.
    je suppose que tu as sauvegarder ton image dans un blob ?

  6. #6
    Membre confirmé Avatar de Luffy Duck
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 165
    Par défaut
    En effet, je viens juste de tester le cast en BYTE *, et cela fonctionne.

    je suppose que tu as sauvegarder ton image dans un blob ?
    Oui, mais le nom sous SQL Server est image, et non blob comme dans le monde libre (MySQL). Ce qui revient de toutes façons exactement au même

    Par contre, j'ai essayé de frimer en crééant ma classe comme il était indiqué dans la FAQ, en la modifiant étant donné que je ne charge pas l'image à partir d'un fichier. Mais je dois avouer que je suis un peu perdu...

    Je n'ai pas tout compris dans l'utilisation du CDC
    je vais faire un tour sur la msdn.

  7. #7
    Membre confirmé Avatar de Luffy Duck
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 165
    Par défaut
    Je ne passe pas dans la fonction DrawItem de ma classe...

    Comment faire pour qu'elle soit appelée ?

    [EDIT] Ok, il faut que j'apprenne à lire : Note : il faut mettre dans les propriétés du contrôle l’option OWner Draw sinon ça ne fonctionne pas.

    Par contre, elle n'est appelée qu'à la création de la boite de dialogue, et pas à l'appel de Invalidate().

  8. #8
    Membre confirmé Avatar de Luffy Duck
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 165
    Par défaut
    Bon c'est encore moi, ça y est ça passe dans DrawItem(), il fallait pas mettre virtual devant la déclaration de la fonction.

    Par contre, l'image n'a pas l'air de se charger. L'auteur dit que les jpeg sont supportés, or il utilise la fonction OleLoadPicture() et la msdn dit : The stream must be in BMP (bitmap), WMF (metafile), or ICO (icon) format. Donc je ne comprends pas trop là...

  9. #9
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 288
    Billets dans le blog
    2
    Par défaut
    Si j'ai bien compris, tu utilises la classe CPicture?
    Si c'est le cas, il ne devrait pas y avoir de problèmes avec les jpg, je l'ai déjà utilsée avec succés.

  10. #10
    Membre confirmé Avatar de Luffy Duck
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 165
    Par défaut
    he bien lors de l'appel de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OleLoadPicture(pStream, nSize, FALSE, IID_IPicture, (LPVOID *)&m_IPicture);
    m_IPicture reste à NULL. Je ne comprends car il n'ya pas l'air d'avoir d'erreur...

    ça a l'air d'être un problème de letcure des données dans la base, car quand je mets un chemin en dur, cela fonctionne.

    [EDIT] le problème vient du fait que je récupère les données de l'image dans en héxa dans une chaine de caractères. Il faudrait que je puisse convertir cette chaine d'hexa en binaire, et le tour est joué !

  11. #11
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    Citation Envoyé par Luffy Duck
    he bien lors de l'appel de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OleLoadPicture(pStream, nSize, FALSE, IID_IPicture, (LPVOID *)&m_IPicture);
    m_IPicture reste à NULL. Je ne comprends car il n'ya pas l'air d'avoir d'erreur...

    ça a l'air d'être un problème de letcure des données dans la base, car quand je mets un chemin en dur, cela fonctionne.

    [EDIT] le problème vient du fait que je récupère les données de l'image dans en héxa dans une chaine de caractères. Il faudrait que je puisse convertir cette chaine d'hexa en binaire, et le tour est joué !
    d'ou ma question de tout a l'heure ,sous mysql je suis obligé de faire un traitement pour convertir en ascii une zone binaire.

  12. #12
    Membre confirmé Avatar de Luffy Duck
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 165
    Par défaut
    et tu fais comment ???

    en fait, je reçois la chaine de caractères en hexa, style : "FFAED00546...", mais quand je met le chemin d'une image, la chaine est du genre : "ÿoÿpr..."

    Donc comment je peux convertir de la première chaine vers la deuxième ?

  13. #13
    Membre confirmé Avatar de Luffy Duck
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 165
    Par défaut
    Bon j'ai fait un algo, je sais pas vraiment s'il est propre, mais il fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    CString hex2bin(CString input)
    {
    	char *c = "", *buf="";
    	CString buffer = "", output="";
    	int n = 0, size = input.GetLength();
    	while(n < size)
    	{
    		buffer = input.Mid(n, 2);
    		int nb = strtol(buffer.GetBuffer(), &c, 16);
    		buf = (char *)&nb;
    		output.Insert(output.GetLength(), buf);
    		n+=2;
    	}
    	return output;
    }
    Si jamais vous avez une idée pour l'améliorer, (ou pour dire qu'il est parfait ), n'hésitez pas.

    en tout cas à tous !!![/code]

  14. #14
    Membre confirmé Avatar de Luffy Duck
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 165
    Par défaut
    euh... en fait ça ne fonctionne toujours pas...

    Il y a un petit problème avec le caractère 0. En effet, quand la chaine est égale à "00" en héxa, il ne veut pas l'ajouter à la chaine de sortie.

    Or quand j'édite un fichier jpg avec un éditeur héxa, il y a des caractères nul. Auriez-vous une idée ?

  15. #15
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 394
    Par défaut
    Au lieu d'utiliser une chaîne, il te faudra utiliser un tableau de char dont tu mémorises la longueur séparément.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  16. #16
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut,
    ton code ne peut fonctionner ,insert attend une string donc une chaine se terminant par \0 si ta conversion hexa->bin donne 0 c'est foutu ...
    il faut que tu alloues une chaine de caractere qui correspond a la taille finale de la chaine en hexa en binaire (/2).
    et dont tu affectes chaque octet avec le resultat de ta conversion ...
    cette chaine tu peux ensuite la mettre dans une CString mais c'est pas forcement utile ....
    avec une CString il faudra utiliser le constructeur :CString( LPCTSTR lpch, int nLength );

    note: ce que je ne comprends pas c'est si sql founit un type image la fonction de chargement de la zone convertit en hexa et tu n'as pas de fonction de retour pour recupérer la valeur ?


  17. #17
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    a titre d'infos voila ce que j'utilise pour remplir un blob avec une zone binaire avec MySql:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
    414
    415
    416
    417
    418
    419
    420
    421
    422
    423
    424
    425
    426
    427
    428
    429
    430
    431
    432
    433
    434
    435
    436
    437
    438
    439
    440
    441
     
    /* ---------- sprintf function for mysql that can handle blobs---------- */
    /*      This code is in public domain ;  Originally By Chunhua Liu       */
    #ifndef _MYSPRINTF_H
    #define _MYSPRINTF_H
     
    #include <stdio.h>
    #include <stdarg.h>
    #include <ctype.h>
     
    #define ZEROPAD 1  /* pad with zero */
    #define SIGN 2  /* unsigned/signed long */
    #define PLUS 4  /* show plus */
    #define SPACE 8  /* space if plus */
    #define LEFT 16  /* left justified */
    #define SPECIAL 32  /* 0x */
    #define LARGE 64  /* use 'ABCDEF' instead of 'abcdef' */
     
    static int skip_atoi(const char **s)
    {
    	int i=0;
     
    	while (isdigit(**s)) i = i*10 + *((*s)++) - '0';
    	return i;
    }
     
    static char *number(char *str, long num, int base, int size, int precision,
    					int type)
    {
    	char c,sign,tmp[66];
    	const char *digits="0123456789abcdefghijklmnopqrstuvwxyz";
    	int i;
     
    	if (type & LARGE) digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    	if (type & LEFT) type &= ~ZEROPAD;
    	if (base < 2 || base > 36) return 0;
    	c = (type & ZEROPAD) ? '0' : ' ';
    	sign = 0;
    	if (type & SIGN)
    	{
    		if (num < 0)
    		{
    			sign = '-';
    			num = -num;
    			size--;
    		} else if (type & PLUS)
    		{
    			sign = '+';
    			size--;
    		} else if (type & SPACE)
    		{
    			sign = ' ';
    			size--;
    		}
    	}
    	if (type & SPECIAL)
    	{
    		if (base == 16) size -= 2;
    		else if (base == 8)size--;
    	}
    	i = 0;
    	if (num == 0) tmp[i++]='0';
    	else while (num != 0)
    	{
    		int __res;
    		__res = ((unsigned long) num) % (unsigned) base;
    		num = ((unsigned long) num) / (unsigned) base;
    		tmp[i++] = digits[__res];
    	}
    	if (i > precision) precision = i;
    	size -= precision;
    	if (!(type&(ZEROPAD+LEFT))) while(size-->0) *str++ = ' ';
    	if (sign) *str++ = sign;
    	if (type & SPECIAL)
    	{
    		if (base==8) *str++ = '0';
    		else if (base==16)
    		{
    			*str++ = '0';
    			*str++ = digits[33];
    		}
    	}
    	if (!(type & LEFT)) while (size-- > 0) *str++ = c;
    	while (i < precision--) *str++ = '0';
    	while (i-- > 0) *str++ = tmp[i];
    	while (size-- > 0) *str++ = ' ';
    	return str;
    }
     
    static size_t strnlen(const char * s, size_t count)
    {
    	const char *sc;
     
    	for (sc = s; count-- && *sc != '\0'; ++sc)
    		/* nothing */;
    		return sc - s;
    }
     
    static int myvsnprintf(char *buf, size_t maxlen, const char *fmt, va_list args)
    {
    	int len;
    	unsigned long num;
    	int i, base;
    	char *str;
    	const char *s;
    	char esc;
     
    	int flags;   /* flags to number() */
     
    	int field_width; /* width of output field */
    	int precision;  /* min. # of digits for integers;
    					 max number of chars for from string */
    	int qualifier;  /* 'h', 'l', or 'L' for integer fields */
     
    	for (str=buf; *fmt; ++fmt)
    	{
    		if (str-buf >= maxlen)
    		{
    			buf[maxlen-1] = '\0'; // truncated
    			return -1;
    		}
     
    		if (*fmt != '%')
    		{
    			*str++ = *fmt;
    			continue;
    		}
     
    		/* process flags */
    		flags = 0;
    repeat:
    		++fmt;  /* this also skips first '%' */
    		switch (*fmt)
    		{
    		case '-': flags |= LEFT; goto repeat;
    		case '+': flags |= PLUS; goto repeat;
    		case ' ': flags |= SPACE; goto repeat;
    		case '#': flags |= SPECIAL; goto repeat;
    		case '0': flags |= ZEROPAD; goto repeat;
    		}
     
    		/* get field width */
    		field_width = -1;
    		if (isdigit(*fmt)) field_width = skip_atoi(&fmt);
    		else if (*fmt == '*')
    		{
    			++fmt;
    			/* it's the next argument */
    			field_width = va_arg(args, int);
    			if (field_width < 0)
    			{
    				field_width = -field_width;
    				flags |= LEFT;
    			}
    		}
     
    		/* get the precision */
    		precision = -1;
    		if (*fmt == '.')
    		{
    			++fmt;
    			if (isdigit(*fmt)) precision = skip_atoi(&fmt);
    			else if (*fmt == '*')
    			{
    				++fmt;
    				/* it's the next argument */
    				precision = va_arg(args, int);
    			}
    			if (precision < 0) precision = 0;
    		}
     
    		/* get the conversion qualifier */
    		qualifier = -1;
    		if (*fmt == 'h' || *fmt == 'l' || *fmt == 'L')
    		{
    			qualifier = *fmt;
    			++fmt;
    		}
     
    		/* default base */
    		base = 10;
     
    		switch (*fmt)
    		{
    		case 'c':
    			if (!(flags & LEFT)) while (--field_width > 0) *str++ = ' ';
    			*str++ = (unsigned char) va_arg(args, int);
    			while (--field_width > 0) *str++ = ' ';
    			continue;
     
    		case 's':
    			s = va_arg(args, char *);
    			if (!s) s = "<NULL>";
     
    			len = strnlen(s, precision);
     
    			if (!(flags & LEFT)) while (len < field_width--)
    			{
    				*str++ = ' ';
    				if (str-buf >= maxlen)
    				{
    					buf[maxlen-1] = '\0'; // truncated
    					return -1;
    				}
    			}
     
    			for (i = 0; i < len; ++i)
    			{
    				*str++ = *s++;
    				if (str-buf >= maxlen)
    				{
    					buf[maxlen-1] = '\0'; // truncated
    					return -1;
    				}
    			}
     
    			while (len < field_width--)
    			{
    				*str++ = ' ';
    				if (str-buf >= maxlen)
    				{
    					buf[maxlen-1] = '\0'; // truncated
    					return -1;
    				}
    			}
     
    			continue;
     
    		case 'b':
    			s = va_arg(args, char *);
    			if (!s) s = "<NULL>";
     
    			len = precision;
     
    			for (i = 0; i < len; ++i)
    			{
    				esc = 0;
    				switch (*s)
    				{
    				case 0:    /* Must be escaped for 'mysql' */
    					*str++= '\\';
    					esc = '0';
    					break;
    				case '\n':    /* Must be escaped for logs */
    					*str++= '\\';
    					esc = 'n';
    					break;
    				case '\r':
    					*str++= '\\';
    					esc = 'r';
    					break;
    				case '\\':
    					*str++= '\\';
    					esc = '\\';
    					break;
    				case (-110):
    				case '\'':
    					*str++= '\\';
    					esc = 'C';
    					break;
    				case '"':    /* Better safe than sorry */
    					*str++= '\\';
    					esc = 'G';
    					break;
    				case '\032':   /* This gives problems on Win32 */
    					*str++= '\\';
    					esc = 'Z';
    					break;
    				default:
    					*str++= *s;
    				}
    				s++;
    				if (str-buf >= maxlen)
    				{
    					buf[maxlen-1] = '\0'; // truncated
    					return -1;
    				}
    				if ( esc )
    				{
    					*str++ = esc;
    					if (str-buf >= maxlen)
    					{
    						buf[maxlen-1] = '\0'; // truncated
    						return -1;
    					}
    				}
    			}
     
    			continue;
     
    		case 'p':
    			if (field_width == -1)
    			{
    				field_width = 2*sizeof(void *);
    				flags |= ZEROPAD;
    			}
    			str = number(str, (unsigned long) va_arg(args, void *), 16,
    				field_width, precision, flags);
    			continue;
     
     
    		case 'n':
    			if (qualifier == 'l')
    			{
    				long * ip = va_arg(args, long *);
    				*ip = (str - buf);
    			}
    			else
    			{
    				int * ip = va_arg(args, int *);
    				*ip = (str - buf);
    			}
    			continue;
     
    		case '%':
    			*str++ = '%';
    			continue;
     
    			/* integer number formats - set up the flags and "break" */
    		case 'o':
    			base = 8;
    			break;
     
    		case 'X':
    			flags |= LARGE;
    		case 'x':
    			base = 16;
    			break;
     
    		case 'd':
    		case 'i':
    			flags |= SIGN;
    		case 'u':
    			break;
     
    		default:
    			*str++ = '%';
    			if (*fmt) *str++ = *fmt;
    			else --fmt;
    			continue;
      }
      if (qualifier == 'l') num = va_arg(args, unsigned long);
      else if (qualifier == 'h')
      {
    	  num = (unsigned short) va_arg(args, int);
    	  if (flags & SIGN) num = (short) num;
      } else if (flags & SIGN) num = va_arg(args, int);
      else num = va_arg(args, unsigned int);
      str = number(str, num, base, field_width, precision, flags);
     }
     *str = '\0';
     return str-buf;
    }
     
    static int mysnprintf(char * buf, size_t maxlen, const char *fmt, ...)
    {
    	va_list args;
    	int i;
     
    	va_start(args, fmt);
    	i=myvsnprintf(buf, maxlen, fmt, args);
    	va_end(args);
    	return i;
    }
     
    static int str2bin(char *buf, const char *szchar, unsigned long& maxlen)
    {
    	int i;
    	char *str = buf;
    	const char *s;
    	s = szchar;
    	if( !strcmp(szchar, "<NULL>") ){
    		buf[0] = '\0';
    		return 0;
    	}
    	for(i=0; i<maxlen; i++){
    		if( (*s)=='\\' ){
    			switch(*(s+1)){
    			case '0':
    				*str++= '\0';
    				s++;
    				maxlen--;
    				break;
    			case 'n':
    				*str++= '\n';
    				s++;
    				maxlen--;
    				break;
    			case 'r':
    				*str++= '\r';
    				s++;
    				maxlen--;
    				break;
    			case '\\':
    				*str++= '\\';
    				s++;
    				maxlen--;
    				break;
    			case 'C':
    				*str++= '\'';
    				s++;
    				maxlen--;
    				break;
    			case 'G':
    				*str++= '\"';
    				s++;
    				maxlen--;
    				break;
    			case 'Z':
    				*str++= '\032';
    				s++;
    				maxlen--;
    				break;
    			default:
    				*str++= '\\';
    			}
    		}
    		else
    			*str++ = *s;
    		s++;
    	}
    	//*str = '\0';
    	return i;
    }
    /*int main()
    {
    char buf[10];
    char bin[20]="\0'\"\r\n\01234567890";
     
      printf("12345678901234567890\n");
      mysnprintf(buf, 10, "%.10b", bin);
      // use type 'b' to work with blob field,the dot is needed 
      printf("%s\n", buf);
      //mysnprintf(dest, sizeof(dest), "%.*b", sizeof(src), src);
      mysnprintf(buf, 10, "%.*b", 3, bin);
      printf(buf);
      return 0;
      }
    */
    #endif
    /*---- source end here */

  18. #18
    Membre confirmé Avatar de Luffy Duck
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 165
    Par défaut
    ok, en effet ça roule ! merci encore

    [EDIT] je n'avais pas vu ton message, farscape. eh ben dis donc ! je vais garder tes fonctions sous le coude si jamais j'en ai besoin !

    Pour l'instant l'enregistrement des données dans la base se fait en php, c'est donc beaucoup plus simple !!!

    Mais si jamais cela doit changer, j'aurais besoin de tes fonctions.

    Un grand merci à tous pour votre aide !

    Pour info voilà la fonction finale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    char * CBase::hex2bin(CString input)
    {
    	char *buf="";
    	CString buffer = "";
    	char *output = new char[input.GetLength() / 2];
    	int n = 0, size = input.GetLength(), nb_cara=0;
    	while(n < size)
    	{
    		char *c="";
    		buffer = input.Mid(n, 2);
    		int nb = strtol(buffer.GetBuffer(), &c, 16);
    		buf = (char *)&nb;
    		output[nb_cara] = *buf;
    		nb_cara++;
    		n+=2;
    	}
     
    	return output;
    }

  19. #19
    Membre confirmé Avatar de Luffy Duck
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 165
    Par défaut
    décidemment, je n'avais pas vu ton message encore d'avant...

    ce que je ne comprends pas c'est si sql founit un type image la fonction de chargement de la zone convertit en hexa et tu n'as pas de fonction de retour pour recupérer la valeur ?
    euh, je n'ai pas tout compris à ta question là...
    Moi je récupérais une chaine de caractères avec les données en héxa, il fallait donc que je la convertisse en véritable caractères.

  20. #20
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    et bien tu m'a dis que tu disposais d'un type image sous SQL serveur ,la conversion (binaire -> hexa) etait a ta charge ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [VB.NET] afficher une image stockée dans une table
    Par matonfire dans le forum ASP.NET
    Réponses: 4
    Dernier message: 19/03/2004, 11h21
  2. Afficher une image JPG qui se trouve dans une bdd
    Par Harry dans le forum Bases de données
    Réponses: 6
    Dernier message: 27/02/2004, 10h51
  3. Charger et afficher une image jpg avec les mfc
    Par glop - pas glop dans le forum MFC
    Réponses: 3
    Dernier message: 11/02/2004, 18h59
  4. Réponses: 2
    Dernier message: 04/02/2004, 22h32
  5. Afficher une image sans passer par les textures
    Par Black_Daimond dans le forum DirectX
    Réponses: 3
    Dernier message: 09/05/2003, 19h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo