29/03/2024
Windev et les Api WindowsNb de visiteurs en ligne : 1
>> Introduction << >> Codes et Forum << >> Download <<


Nombre de messages : 21 page : 2 sur 3Première PagePage PrécédentePage SuivanteDernière Page
Rubrique : 2 - Windev 7x       Sujet : Explorateur d'image (browser)
Auteur Message
 Romain PETIT Posté le : 29/03/2003 22:55:23


Salut,

il y a un petit SDK MS pour l'acquisition d'image (pour COM+, XP SP1 uniquement).
C'est une DLL très intéressante pour le traitement des images.
Je m'en suisi servi très recemment pour convertir en automatique des BMP en TIF. Ultra simple et très rapide et il y a des exemples en VB (rotations, conversions,...)

Voici l'adresse où télécharger :

http://minilien.com/?iwhupNe2ZV


Et voici à quoi ressemble le code WD75 pour la conversion (sans même avoir besoin d'un champ image) :

wiaFormatTIFF est une chaîne ASCIIZ sur
255="{B96B3CB1-0728-11D3-9D7B-0000F81EF32E}"

oFichierImage est un objet automation dynamique
oProcessImage est un objet automation dynamique

oFichierImage = allouer un objet automation "WIA.ImageFile"
oProcessImage = allouer un objet automation "WIA.ImageProcess"

oFichierImage>>LoadFile("E:\Documents\Mes images\Logo.bmp")

oProcessImage>>Filters>>Add(oProcessImage>>FilterInfos("Convert")>>FilterID)
oProcessImage>>Filters(1)>>Properties("FormatID")>>Value = wiaFormatTIFF

oFichierImage = oProcessImage>>Apply(oFichierImage)
oFichierImage>>SaveFile("E:\Documents\Mes images\Logo.tif")

Pas mal non ? Dommage que cela ne marche que sous XP...


A+

 °¨¨ JL ¨¨° Posté le : 30/03/2003 01:32:53


Salut,

Effectivement ça a l'air sympa comme truc, mais comme c'est juste pour xp...  

Une autre solution consiste à utiliser le gdi+ avec la dll à downloader chez microsoft. Je viens de le faire, et apparement c'est assez facile à utiliser. Au niveau image, les BMP, ICON, GIF, JPEG, Exif, PNG, TIFF, WMF et EMF sont gérés.

KPiTN, avant l'appel à toutes fonctions de gdiplus, faut faire un GdiplusStartup...

Le résultat des fonctions ne correspond pas aux erreurs windows mais à un status, si c'est égal à zéro alors c'est bon.

Je vais regarder ça d'un peu plus près

A+


 KPiTN Posté le : 31/03/2003 17:22:37


Bon Alors je reprends ce que j'ai fait je pense pas etre tres loin, mais j'ai un pb

Token est un entier
testDLL est un entier
gdiplusstartout est un Variant
gdiplusstartupInput est une structure
gdiplusversion est un entier
debugeventcallback est un entier
suppressbackgroundthread est un booléen
suppressexternalcodecs est un booléen
FIN
MaStructure est un gdiplusstartupInput
MaStructure:gdiplusversion =1
MaStructure:debugeventcallback = Null
MaStructure:suppressbackgroundthread=0
MaStructure:suppressexternalcodecs=0
ChargeDLL("gdiplus.dll")
gdiplusstartout=Null
testDLL=AppelDLL32("gdiplus.dll","GdiplusStartup",Token,MaStructure,gdiplusstartout)

Et la y a un paremetre qu'il apprecie pas ...
Vous avez appelé la fonction AppelDLL32.
Le passage du paramètre 4 a provoqué une erreur.
Types incompatibles durant une affectation.

J'ai essayer sans le testDLL :
AppelDLL32("gdiplus.dll","GdiplusStartup",Token,MaStructure,gdiplusstartout)
et pareil ... snif

 KPiTN Posté le : 31/03/2003 17:36:40


Euh autant pour moi :

AppelDLL32("gdiplus.dll","GdiplusStartup",&Token,&MaStructure,gdiplusstartout)

ca passe, il reste plus qu'a trouver comment j'utilise multibytetowidechar :)

 °¨¨ JL ¨¨° Posté le : 01/04/2003 13:44:32


Re,

fic_a est une chaine asciiz de 256 = "c:\tonimage.tiff"
fic_u est une chaine asciiz de 512

api("kernel32","MultiByteToWideChar" , 0 , 0 , &fic_a , -1 , &fic_u , dimension(fic_u) )

himage est un entier sur 4 octets

api("gdiplus",GdipLoadImageFromFile", &fic_u , &himage)

A+


 KPiTN Posté le : 01/04/2003 14:45:59


Token est un entier
gdiplusstartout est un Variant
gdiplusstartupInput est une structure
gdiplusversion est un entier
debugeventcallback est un entier
suppressbackgroundthread est un booléen
suppressexternalcodecs est un booléen
FIN
MaStructure est un gdiplusstartupInput
MaStructure:gdiplusversion =1
MaStructure:debugeventcallback = Null
MaStructure:suppressbackgroundthread=False
MaStructure:suppressexternalcodecs=False
ChargeDLL("gdiplus.dll")
gdiplusstartout=Null
API("gdiplus.dll","GdiplusStartup",&Token,&MaStructure,gdiplusstartout)

fic_a est une chaîne ASCIIZ de 256 = "c:\MSI.jpg"
fic_u est une chaîne ASCIIZ de 512

API("kernel32","MultiByteToWideChar" , 0 , 0 , &fic_a , -1 , &fic_u , Dimension(fic_u) )

himage est un entier sur 4 octets

AppelDLL32("gdiplus.dll","GdipLoadImageFromFile",&fic_u,&himage)

Width est un entier

AppelDLL32("gdiplus.dll","GdipGetImageWidth",himage,&Width)
Trace(Width)

Et voila j'ai ma largeur ca roule THX JL

 KPiTN Posté le : 01/04/2003 16:06:11


et maintenant autre probleme :)

je veux faire une rotation et sauver l'image :

Pour le debut meme code qu'avant :

AppelDLL32("gdiplus.dll","GdipLoadImageFromFile",&fic_u,&himage)

encoderClsid est un Variant
AppelDLL32("gdiplus.dll","GdipImageRotateFlip",himage,"45")
AppelDLL32("gdiplus.dll","GetEncoderClsid","image/jpeg",&encoderClsid)
AppelDLL32("gdiplus.dll","GdipSaveImageToFile",himage,fic_u,encoderClsid,0)

Il me dit erreur sur la ligne GetEncoderClsid
apparemment le encoderClsid est une structure speciale mais j'ai pas trouver comment la declarer ...

 KPiTN Posté le : 01/04/2003 16:34:24


Que vois je un moyen pour recuperer Cslid :

int CMiniProjectView::GetEncoderClsid
                      (const WCHAR* format, CLSID* pClsid)
{

UINT  num = 0;          // number of image encoders
  UINT  size = 0;         // size of the image encoder array
                          // in bytes

  ImageCodecInfo* pImageCodecInfo = NULL;

  GetImageEncodersSize(&num, &size);
  if(size == 0)
    return -1;

  pImageCodecInfo = (ImageCodecInfo*)(malloc(size));
  if(pImageCodecInfo == NULL)
    return -1;

  GetImageEncoders(num, size, pImageCodecInfo);

  for(UINT j = 0; j < num; ++j)
  {
    if( wcscmp(pImageCodecInfo[j].MimeType, format) == 0 )
    {
      *pClsid = pImageCodecInfo[j].Clsid;
      free(pImageCodecInfo);
      return j;  // Success
    }
  }

  free(pImageCodecInfo);
  return -1;
}



Deja rien qua la première fonction j'y arrive pas :
AppelDLL32("gdiplus.dll","GetImageEncodersSize",&num,&size)
Pas de fonction GetImageEncodersSize dans Gdiplus.dll , snif j'aurais essayé  

 °¨¨ JL ¨¨° Posté le : 12/04/2003 19:38:17


Salut KPiTN,

J'ai fais une petite classe pour ce que tu veux faire, voir page download  

A+

 KPiTN Posté le : 15/04/2003 15:20:30


GG, vraiment super

Je vais pouvoir faire tout ce que je voulais, meme tester les images vignettes  

Encore une fois Merci JL

Nombre de messages : 21 page : 2 sur 3Première PagePage PrécédentePage SuivanteDernière Page
>> Poster un message dans un NOUVEAU sujet.
>> Poster un message dans ce sujet.