Coller une image dans un objet tdbimage

famjerom Messages postés 15 Date d'inscription mercredi 3 novembre 2004 Statut Membre Dernière intervention 13 février 2009 - 19 nov. 2006 à 19:22
famjerom Messages postés 15 Date d'inscription mercredi 3 novembre 2004 Statut Membre Dernière intervention 13 février 2009 - 19 nov. 2006 à 23:56
J'ai créé une base de donnée SQL SERVER.
Une table contient une image (type image ou varbinary) affichée à l'aide de l'objet VCL TDBImage de Delphi 2005.
 
Je souhaite que l'utilisateur puisse ajouter des images.
Je n'ai pas eu de problème pour charger à partir d'un fichier (transfert à l'aide de stream) de nombreux formats de fichier.
 
Le problème se pose pour les copier coller (depuis photoshop ou une image sur une page web).
 
J'obtiens "paramètre non valide utilisé" quelle que soit la méthode. Erreur qui reste quand les données sont enregistrées dans le BLOB.
 
J'ai fait des essais en collant directement l'image dans le contôle avec la souris, en faisant assign(clipboard), en utilisant un objet Tbitmap intermédiaire, etc
 
Après recherche, le problème vient du fait que l'image stockée dans le presse-papier est au format bitmap (il y a bien l'entête à $424D) 32 (ou 16) bits par pixel. Or TDBImage n'accepte que 1, 2, 8 ou 16 bits par pixel. D'ailleur Photoshop fait pareil et une image obtenue par coller et enregistrée directement sur disque par savetofile n'est pas lisible par photoshop.
 
J'ai voulu utiliser la propriété Pixelformat qui change le format de l'image (ca se voit, photoshop lit l'image) pour forcer à 24 bit et mettre HandleType à bmDIB mais j'ai toujours la même erreur.  
 
Y a-t-il encore un paramètre caché à changer? 

C'est TDBimage qui a un problème, Timage fonctionne correctement avec touts les formats.
 
PS: j'ai essayé les méthodes draw et LoadFromClipboardFormat sans succès
Même sauvegarder l'image dans un fichier ne lui fait pas perdre son caractère anti SQL SERVER.
 
Merci de votre aide.  

5 réponses

famjerom Messages postés 15 Date d'inscription mercredi 3 novembre 2004 Statut Membre Dernière intervention 13 février 2009
19 nov. 2006 à 21:04
En fait c'est le composant TDBImage qui pose un problème:
  Il me dit "paramètre non valide utilisé" lorsqu'il doit lire ou écrire une image bitmap 32 bits

Si j'utilise un composant tImage et que je fait la lecture écriture "à la main", ça fonctionne correctement.

Bug ou erreur de ma part?

J'épluche le source quand même à tout hazard.

Merci
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
19 nov. 2006 à 22:39
Bonsoir famjerom.
Est-ce un oubli de ta part ou tu n'as pas encore essayé la méthode PasteFromClipboard de TDbImage ?

May Delphi be with you !
<hr color="#008000" />
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
0
famjerom Messages postés 15 Date d'inscription mercredi 3 novembre 2004 Statut Membre Dernière intervention 13 février 2009
19 nov. 2006 à 23:07
Je viens de la faire mais ça ne change rien.
C'est normal car si on fait ctrl C puis Ctrl V dans le controle DBImage ça appelle PasteFromClipboard.

Après des centaines d'essais, c'est bien précisément quand la commande post est exécutée avec une image arrivée dans TDBImage par copier coller qu'il y a erreur.
Pas au moment du coller.
Et même si l'image a été enregistrée dans un fichier à partir d'un TImage.loadtofile et lue par tdbimage.loadfromfile.

Copie des sources à suivre.
0
famjerom Messages postés 15 Date d'inscription mercredi 3 novembre 2004 Statut Membre Dernière intervention 13 février 2009
19 nov. 2006 à 23:47
if Clipboard.HasFormat(CF_BITMAP) then
begin
   Table_informations.Edit;
   DBImage.PasteFromClipboard;
   Table_informations.Post;
end;

Erreur au momment du post.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
famjerom Messages postés 15 Date d'inscription mercredi 3 novembre 2004 Statut Membre Dernière intervention 13 février 2009
19 nov. 2006 à 23:56
Par contre:

Table_informations.Edit;
TImage.Picture.LoadFromClipboardFormat(CF_BITMAP, Clipboard.GetAsHandle(CF_BITMAP), 0);
TImage.Picture.savetofile('essai.bmp');
DBImage.Picture.bitmap.LoadFromfile('essai.bmp');
Table_informations.Post;

Fonctionne!!!!!!!!??
0
Rejoignez-nous