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

C++Builder Discussion :

Résolution TBitmap


Sujet :

C++Builder

  1. #1
    Membre averti
    Inscrit en
    Juin 2003
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 62
    Par défaut [Résolu] Résolution TBitmap
    Salut
    J'utilise une petite API pour manipuler un scnner en Twain. Il me retourne une image dans un Graphics::TBitmap, je peux même la sauver avec un SaveToFile classique. Mais l'image sur le disque ne comporte pas les informations de résolution, les champs sont vides.
    J'ai essayé de sauvegarder l'image avec Japi, même punition....
    La lib que j'utilise est TAcquireImage
    Le problèmes c'est que j'ai absolument de cette informations par la suite que je relie dans un programme externe. Le fait que les champs soient nuls mettent la valeur de la résolution à 0, donc forcément ca bugue !!

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Juin 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2005
    Messages : 351
    Par défaut
    Je ne sais pas si c'est pertinent, mais tous les formats d'image ne comprennent pas l'indication de la résolution...

    Quel format utilises-tu? As-tu essayé un autre format? Il te faudra peut-être sauver l'image en JPEG...

  3. #3
    Membre averti
    Inscrit en
    Juin 2003
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 62
    Par défaut
    Oui je travaille avec des BMP, je dois utiliser ce format pour diverses raisons.

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Juin 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2005
    Messages : 351
    Par défaut
    Pour ce que j'en sais, le format bitmap ne stock pas d'information concernant la résolution. Tu vas devoir l'enregistrer à part (fichier, registry, etc.) pour la retrouver plus tard.

  5. #5
    Membre averti
    Inscrit en
    Juin 2003
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 62
    Par défaut
    mmmmm non je ne crois pas
    je peux récupérer ces informations de résolution en X & Y grâce à ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
      FILE * f = fopen("mon_image.bmp", "r");
      fseek(f,38,SEEK_SET);
      fscanf(f, "%4c", &iResolutionX);
      fseek(f,42,SEEK_SET);
      fscanf(f, "%4c", &iResolutionY);
      fclose(f);
    Ou alors peut être que je pourrais les fixer par programmation avant la sauvgarde sur le disque pour être sûr qu'elles soient bien renseignées..mais la question est :"quel est ce champ??"

  6. #6
    Membre chevronné

    Profil pro
    Inscrit en
    Juin 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2005
    Messages : 351
    Par défaut
    Autant pour moi... J'aurai appris qqch

    J'ai effectivement trouvé les spécification du format sur le web et il y a un emplacement pour la résolution (en pixels par mètre ?!?). Mais cette doc indique que ces deux valeurs sont généralement mises à zéro...

    Tu pourrais aller réécrire les valeurs dans le fichier après qu'il a été sauvé!

  7. #7
    Membre chevronné

    Profil pro
    Inscrit en
    Juin 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2005
    Messages : 351
    Par défaut
    Comme la class TBitmap implémente l'objet windows HBITMAP, tu peux aller récupérer son handle et peut-être le modifier toi-même.

    Tu retrouves le Handle sur l'objet HBITMAP avec TBitmap::Handle et il faut ensuite retrouver la position de la structure BITMAPINFOHEADER dans l'objet HBITMAP, mais je n'ai pas très bien compris sur MSDN sur quoi point le handle et comment retrouver cette structure...

    Depuis MSDN:
    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
     
    BITMAPINFOHEADER
    The BITMAPINFOHEADER structure contains information about the dimensions and color format of a DIB. 
     
    Windows 95, Windows NT 4.0: Applications can use the BITMAPV4HEADER structure for added functionality. 
     
    Windows 98/Me, Windows 2000/XP: Applications can use the BITMAPV5HEADER structure for added functionality. However, these are used only in the CreateDIBitmap function.
     
    typedef struct tagBITMAPINFOHEADER{
      DWORD  biSize; 
      LONG   biWidth; 
      LONG   biHeight; 
      WORD   biPlanes; 
      WORD   biBitCount; 
      DWORD  biCompression; 
      DWORD  biSizeImage; 
      LONG   biXPelsPerMeter; 
      LONG   biYPelsPerMeter; 
      DWORD  biClrUsed; 
      DWORD  biClrImportant; 
    } BITMAPINFOHEADER, *PBITMAPINFOHEADER;

  8. #8
    Membre averti
    Inscrit en
    Juin 2003
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 62
    Par défaut
    mmmmm j'avais pensé à cela mais en fait je ne la connais pas la résolution..
    En utilisant le scanner pour acquérir l'image on peut spécifier la résolution de l'image comme on le souhaite et dans la lib que j'utilise pas moyen d'y avoir accès...Sinon je vais regarder du coté d'une autre lib on ne sait jamais

  9. #9
    Membre averti
    Inscrit en
    Juin 2003
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 62
    Par défaut
    Bon du coup je garde la sauvegarde que j'avais. Ensuite avec le libTwain je récupère la valeur de résolution et je la réécris à la main avec un petit FILE * directement dans l'en-tête du fichier.
    Voila
    MErci bien

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Modifier résolution (dpi) d'un TBitmap
    Par Onimaru dans le forum Delphi
    Réponses: 2
    Dernier message: 29/12/2014, 09h06
  2. tbitmap.free dans une function
    Par portu dans le forum Langage
    Réponses: 7
    Dernier message: 19/06/2003, 22h08
  3. [Impression] Probleme d'échelle/résolution
    Par Dajon dans le forum C++Builder
    Réponses: 3
    Dernier message: 12/05/2003, 14h56
  4. résolution d'equation f(x) = 0
    Par magicien dans le forum C
    Réponses: 8
    Dernier message: 06/05/2003, 16h06
  5. recuperer la résolution de l'écran
    Par florent dans le forum C++Builder
    Réponses: 11
    Dernier message: 07/06/2002, 15h01

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