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

Langage Delphi Discussion :

DelphiTwain - Image en grisé coupée en 2


Sujet :

Langage Delphi

  1. #1
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 148
    Points : 1 414
    Points
    1 414
    Par défaut DelphiTwain - Image en grisé coupée en 2
    Bonjour à tous

    Je récupère l'image issu d'un scanner en utilisant l'unité DelphiTwain.

    Si le scan en couleur fournit une image correct, ce n'est pas le cas lorsque je demande que l'image soit traitée en nuances de gris (voir les fichiers attachés en exemple).

    Voici le code (tout simple , et pourtant...)
    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
    PROCEDURE Tfpdf.Button6Click(Sender: TObject);
    VAR
       Scanner: TDelphiTwain;
       Source_Choisie: Integer;
    BEGIN
       TRY
          Scanner := TDelphiTwain.Create(Self);
          Scanner.OnTwainAcquire := TwainTwainAcquire;
          IF Scanner.LoadLibrary THEN
          BEGIN
             Scanner.LoadLibrary;
             Scanner.LoadSourceManager;
             Source_Choisie := Scanner.SelectSource;
             Scanner.Source[Source_Choisie].Loaded := TRUE;
             Scanner.Source[Source_Choisie].SetIPixelType(TbdRgb);
             Scanner.Source[Source_Choisie].EnableSource(False, True);
             WHILE Scanner.Source[Source_Choisie].Enabled DO
                Application.ProcessMessages;
             Scanner.UnloadLibrary;
          END;
       FINALLY
          Scanner.Free;
       END;
    END;
    
    PROCEDURE Tfpdf.TwainTwainAcquire(Sender: TObject; CONST Index: Integer;
      Image: TBitmap; VAR Cancel: Boolean);
    BEGIN
       IImage.Picture.Assign(Image);
       Cancel := TRUE; { Only want one image }
    END;
    Lorsque ce code est utilisé Scanner.Source[Source_Choisie].SetIPixelType(TbdRgb); les résultat est correct. Mais lorsque c'est Scanner.Source[Source_Choisie].SetIPixelType(TbdGray);, l'image est coupée comme le présente le fichier a_Nb.

    Quelques idées la dessus ?

    a+

    Olivier
    Images attachées Images attachées   

  2. #2
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Bonjour,

    Sous D7 avec la dernière version des sources et un scanner hp4200C, je constate le même défaut...
    Je n'ai pas cherché plus loin pour le moment.

  3. #3
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 148
    Points : 1 414
    Points
    1 414
    Par défaut
    j'avais oublié de préciser que j'étais sous XE2

  4. #4
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 755
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 755
    Points : 13 349
    Points
    13 349
    Par défaut
    Généralement, ces décalages sont dus à une erreur de gestion du format du bitmap (source ou destination). Là, il apparaît clairement que le premier pixel (en bas à gauche) est mal calculé sur la destination et entraîne un décalage sur scanline. La partie reportée à gauche de l'image est d'ailleurs décalée d'un pixel vers le haut.

    Seul le pixel de départ semble être erroné, sinon on remarquerait aussi une compression ou un étirement de l'image avec altération des couleurs (ou des niveaux de gris). Le rapport semble être du 15/24 bits.

  5. #5
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 148
    Points : 1 414
    Points
    1 414
    Par défaut
    Je comprend le problème,

    mais pas comment le résoudre

    d'avance

  6. #6
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 755
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 755
    Points : 13 349
    Points
    13 349
    Par défaut
    Twain est obsolète et certains matériels ne le supportent même plus. Le nouveau standard est WIA (Windows Image Acquisition).

    Regarde plutôt les composants DSPack.

  7. #7
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Citation Envoyé par dehorter olivier Voir le message
    j'avais oublié de préciser que j'étais sous XE2
    J'ai aussi XE2 mais le portable sur lequel il est installé a un problème d'écran.
    Aussi, j'accède actuellement et provisoirement à ce portable via VNC depuis un autre PC : je me vois mal utiliser XE2 par ce biais... (et je ne peux pas y brancher le moniteur du 2° écran).
    Sur le PC, il n'y a que D7 d'où mon 1° test et Lazarus 1.06, d'où mon 2° test.
    Avec ce dernier et les mêmes unités et dll, le scan en nuances de gris est réalisé correctement !
    J'ai juste un problème lors du déchargement de la dll.

    J'ai pas passé le code en revue, mais j'avais noté la présence de {$define FPC}, ce qui m'autorise à penser (comme disait Coluche) que le code est légèrement différent et correct dans ce cas...
    Si j'ai plus de temps, je regarderais plus avant...

  8. #8
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 148
    Points : 1 414
    Points
    1 414
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    Twain est obsolète et certains matériels ne le supportent même plus. Le nouveau standard est WIA (Windows Image Acquisition).

    Regarde plutôt les composants DSPack.
    Merci de l'info.
    Le DsPack n'est plus maintenu depuis Delphi 7. Il ne "passe" pas dans une installation directe en XE2. Il faudrait le retravailler, mais j'avoue que j'en suis incompétent


    J'ai pas passé le code en revue, mais j'avais noté la présence de {$define FPC}, ce qui m'autorise à penser (comme disait Coluche) que le code est légèrement différent et correct dans ce cas...
    J'ai aussi ce code dans ma version

    pour l'instant, j'ai un peu biasé Je scanne en couleur, et je traite l'image acquise en gris si nécessaire...

    et cela en attendant que les grands pontes

Discussions similaires

  1. [GD] écrire sur une centaine d'images d'un coup avec PHP!
    Par 2ememain.biz dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 28/10/2012, 23h31
  2. Réponses: 0
    Dernier message: 14/04/2010, 13h40
  3. Transformation image fond gris -> fond transparent
    Par Mucho dans le forum API graphiques
    Réponses: 6
    Dernier message: 20/02/2007, 14h08
  4. Changer plusieurs images d'un coup
    Par YanK dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 18/07/2005, 17h33

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