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 :

conservation définition d'image


Sujet :

Langage Delphi

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 17
    Points : 17
    Points
    17
    Par défaut conservation définition d'image
    j'utilise delphi6.Pour préparer une randonnée je scanne un morceau de carte(en format A4) et avec un logiciel de mon cru je mesure la distance et trace en surcharge (sur le bitmap hors écran) le trajet puis j'enregistre ce bitmap avec l'extension bmp( comme le fichier de départ) .A partir de cet enregistrement je peux avec tous les logiciels d'ouverture d'image imprimer cette image qui a la même échelle que l'original (1/25000).
    Voulant placer quelques indications et repères sur cette carte, j'ai eu l'idée de placer une bande blanche tout autour pour y mettre ces indications.Tout est fait sur le bitmap hors écran. et j'enregistre avec l'extension bmp (ou jpg).
    Alors certains logiciels d'ouverture d'image ne veulent pas ouvrir ccle fichier enregistré pour l'imprimer et ceux qui l'ouvrent le font avec une échelle différente,en fait avec une résolution de 72 pi/p(celle de l'écran),et il est très difficile de reveniraux dimensions initiales de la carte.

  2. #2
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut

    [...] et j'enregistre avec l'extension bmp (ou jpg). [...]
    A mon humble avis, tout se passe ici, à ce niveau enregistrement. Il ne doit pas être tout à fait conforme.

    @+

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 17
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par Droïde Système7 Voir le message



    A mon humble avis, tout se passe ici, à ce niveau enregistrement. Il ne doit pas être tout à fait conforme.

    @+
    EXTRAIT DU CODE :
    Code :
    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
    ScrollBox1.DoubleBuffered:=True; //importanr pour éviter clignotement
    bmpc:=TBitmap.Create;
    Opendialog1.Execute;
    nomCarte:= OpenDialog1.FileName ;
    bmpc.LoadFromFile(NomCarte);
    ScrollBox1.Visible:=True;//pour y mettre l'image
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////:
    image1.Width:=bmpc.Width;
    image1.height:=bmpc.Height;
    Image1.Visible:=True;
    Image1.Picture.graphic:=bmpc;//affichage de l'image à l'écran
    bmpc.SaveToFile('C:\RandoProv\CarteUtile.bmp'); //On enregistre cette carte dans un dossier 
    //où on la retrouvera facilement
     //ensuite par des clicks de souris on enregistre les coordonnées de certains points  
    bmdest:=TBitmap.Create;
    bmDest.LoadFromFile('C:\RandoProv\CarteUtile.bmp');
    //sur ce bitmap, hors écran,on trace le chemin passant par tous les points
     
    bmDest.SaveToFile('C:\RandoProv\CarteAVECtrace.bmp');
    bmdest.free;
    Le fichier" Carte avec trace.bmp" peut être ouvert par tous les logiciels d'ouverture d'image
    et l'image a les mêmes dimensions que le morceau de carte scanné, c'est à dire que si om l'imprime
    on a une reproductionde la carte à la même échelle.
    (il en est de même si on regarde "carteutile.bmp")

    Pour porter sur cette carte d'autres indications je veux l'entourer d'une bande blanche
    à la place de la ligne ///////////////////////////////////////////////////////////////////:
    j'nsère ce qui suit;

    Code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    page:=TBitmap.Create;
       page.Width:=bmpc.Width+200;
    page.height:=bmpc.Height+200;
    with page.Canvas do
      begin
      brush.Color:=clWhite;
      end;
    page.Canvas.Draw(100,100,bmpc);
    image1.Width:=page.Width;
    image1.height:=page.Height;
    et à la place de "bmpc.SaveToFile('C:\RandoProv\CarteUtile.bmp'); "//
    je mets
    "page.SaveToFile('C:\RandoProv\CarteUtile.bmp');"
    puis
    "page.Free;"
    et je continue comme ci-dessus
    le fichiers "carteutile" et "carteavetrace" ne peut être ouvert que par certains logiciels
    et il est à l'impression de dimensions différente de celui qui a été chargé depuis Nomcarte.
    En fait la définition de l'image a été changée(on retrouve la définition de l'écran insuffisante pour l'impression)
    Je pense que le défaut vient de la façon dont je créée la bande blanche mais je ne trouve pas la solution.

  4. #4
    Membre éprouvé
    Avatar de Montor
    Homme Profil pro
    Autre
    Inscrit en
    Avril 2008
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 879
    Points : 963
    Points
    963
    Par défaut
    pas tout compris mais pense au Pixel format avant d'enregistrer

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 17
    Points : 17
    Points
    17
    Par défaut conservation définition d'image
    Citation Envoyé par Montor Voir le message
    pas tout compris mais pense au Pixel format avant d'enregistrer
    jajouté cette condition pour les 2 bitmaps créés mais il n'y a aucun changement

  6. #6
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    A mon avis, tu devrais réaliser une maquette d'exclusivement ce qui foire en ton code, en laissant de côté toutes les choses sans rapport.

    De cette façon, les choses seraient plus buvables, et tu risquerais d'obtenir un peu plus de réponses

    Sans oublier une indentation correcte, car lorsque je tombe sur du code tartiné à la va-vite, sans aucun relecture de son auteur ; je passe... ce qui doit être loin d'un cas isolé.

    Perso, en général lorsque j'ai un gros souci, je créé une autre maquette bien à part et tente d'extraire exclusivement la partie posant problème du code.

    Tout le monde y gagne, crois-moi, mais faut prendre un peu de temps

    Voilà, j'espère que ça va t'aider à t'aider

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 17
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par Droïde Système7 Voir le message
    A mon avis, tu devrais réaliser une maquette d'exclusivement ce qui foire en ton code, en laissant de côté toutes les choses sans rapport.

    De cette façon, les choses seraient plus buvables, et tu risquerais d'obtenir un peu plus de réponses

    Sans oublier une indentation correcte, car lorsque je tombe sur du code tartiné à la va-vite, sans aucun relecture de son auteur ; je passe... ce qui doit être loin d'un cas isolé.

    Perso, en général lorsque j'ai un gros souci, je créé une autre maquette bien à part et tente d'extraire exclusivement la partie posant problème du code.

    Tout le monde y gagne, crois-moi, mais faut prendre un peu de temps

    Voilà, j'espère que ça va t'aider à t'aider
    j'ai suivi tes conseils.
    Le problème évolue.Il reste à résoudre celui-ci:
    l'image de départ à 200pi/p de dimensions a et b se retrouve après traitement avec la définition de l'écran 72 pi/p et les dimensions multipliées par 200/72
    avec le poids n'ayant pas changé(c'est ainsi qu'on la retrouve après avoir fait un Save).
    Comment faire pour la ramener à 200 pi/p avec les dimensions a et b?

  8. #8
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Bien content que tu réussisses petit à petit de démêler tes oeufs brouillés

    l'image de départ à 200pi/p de dimensions a et b se retrouve après traitement avec la définition de l'écran 72 pi/p et les dimensions multipliées par 200/72
    avec le poids n'ayant pas changé(c'est ainsi qu'on la retrouve après avoir fait un Save).
    Comment faire pour la ramener à 200 pi/p avec les dimensions a et b?
    Là, je vois, je vois, je vois que... idem du code ! (du code bien ciblé, contenant que ce souci)

    Peut-être qu'un autre lecteur aura près de lui sa boule de cristal

    @+

  9. #9
    Expert confirmé

    Profil pro
    Leader Technique
    Inscrit en
    Juin 2005
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 756
    Points : 4 170
    Points
    4 170
    Par défaut
    Citation Envoyé par fansept Voir le message
    j'ai suivi tes conseils.
    Le problème évolue.Il reste à résoudre celui-ci:
    l'image de départ à 200pi/p de dimensions a et b se retrouve après traitement avec la définition de l'écran 72 pi/p et les dimensions multipliées par 200/72
    avec le poids n'ayant pas changé(c'est ainsi qu'on la retrouve après avoir fait un Save).
    Comment faire pour la ramener à 200 pi/p avec les dimensions a et b?
    Normalement, l'information sur la résolution de l'image est inscrite dans l'entête du fichier bmp (il s'agit des champs biXpelsPerMeter et biYPelsPerMeter de BITMAPINFOHEADER).
    Sauf que la classe TBitmap m'a tout l'air de ne pas les gérer du tout...
    Lorsque tu enregistres un bitmap après l'avoir chargé, sans l'avoir modifié, Delphi réenregistre le fichier qui avait été initialement lu à l'identique, et donc l'image conserve sa résolution.
    Si par contre l'image est modifiée, le bitmap est enregistré de toute pièce, et l'information de la résolution m'a tout l'air d'être mise à 0, ce qui doit expliquer que certain logiciel lui applique une résolution par défaut à 72 dpi (ceux qui concerve la résolution ne doivent tout simplement pas gérer l'information).

    Donc pour résoudre ton problème, je ne vois que deux solutions :
    - Changer de composant pour le TBitmap. Il faudra alors en trouver un qui gère la résolution correctement.
    - Essaier de modifier le fichier bmp une fois enregistré, en le ré-ouvrant en binaire pour écrire les deux champs biXpelsPerMeter et biYPelsPerMeter avec la bonne valeur (quelque chose comme 7874 points par mètre pour 200 dpi).

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 17
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par Franck SORIANO Voir le message
    Normalement, l'information sur la résolution de l'image est inscrite dans l'entête du fichier bmp (il s'agit des champs biXpelsPerMeter et biYPelsPerMeter de BITMAPINFOHEADER).
    Sauf que la classe TBitmap m'a tout l'air de ne pas les gérer du tout...
    Lorsque tu enregistres un bitmap après l'avoir chargé, sans l'avoir modifié, Delphi réenregistre le fichier qui avait été initialement lu à l'identique, et donc l'image conserve sa résolution.
    Si par contre l'image est modifiée, le bitmap est enregistré de toute pièce, et l'information de la résolution m'a tout l'air d'être mise à 0, ce qui doit expliquer que certain logiciel lui applique une résolution par défaut à 72 dpi (ceux qui concerve la résolution ne doivent tout simplement pas gérer l'information).

    Donc pour résoudre ton problème, je ne vois que deux solutions :
    - Changer de composant pour le TBitmap. Il faudra alors en trouver un qui gère la résolution correctement.
    - Essaier de modifier le fichier bmp une fois enregistré, en le ré-ouvrant en binaire pour écrire les deux champs biXpelsPerMeter et biYPelsPerMeter avec la bonne valeur (quelque chose comme 7874 points par mètre pour 200 dpi).
    merci pour ces nouveaux conseils.
    L'information de résolution doit effectivement être mise à 0 car si je demande
    l'information biXpelsPermeter pour le bit map enregistré j'obtiens 0.
    Pour la première solution proposée, je ne vois pas du tout ce qu'il faut faire.
    Comment procéder pour ouvrir un fichier en binaire? Là je crois que je suis complètement dépassé.

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 17
    Points : 17
    Points
    17
    Par défaut conservation définition d'image
    Citation Envoyé par fansept Voir le message
    merci pour ces nouveaux conseils.
    L'information de résolution doit effectivement être mise à 0 car si je demande
    l'information biXpelsPermeter pour le bit map enregistré j'obtiens 0.
    Pour la première solution proposée, je ne vois pas du tout ce qu'il faut faire.
    Comment procéder pour ouvrir un fichier en binaire? Là je crois que je suis complètement dépassé.
    J'ai partiellement résolu le pb.
    pour la mesure des distances j'ai du calculer, d'après un click sur 2 points distants d'1 km, le nombre de pi représentant 1 km sur l'écran, donc sur le bitmap.
    d'autre part sur l'imprimante , 1 km doit faire 4 cm, d'où la possibilité de calculer le nombre de pi pour 1 km sur l'imprimante. On peut alors obtenir un coef de réduction pour dessiner le bitmap dans le canvas de l'imprimante.
    Ceci fonctionne avec l'imprimante connectée au pc utilisé avec delphi.
    Si j'utilise l'exe avec un autre Pc, je n'imprime qu'une partie ou une image très petite!

  12. #12
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 699
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 699
    Points : 15 042
    Points
    15 042
    Par défaut
    Salut.
    Citation Envoyé par fansept Voir le message
    (...) Si j'utilise l'exe avec un autre Pc, je n'imprime qu'une partie ou une image très petite!
    Oui, ça semble normal, puisque tu es en train de figer ton programme avec des valeurs en dur calculées depuis ta machine, qui utilise ton imprimante ! Ailleurs ça sera différent, et donc ça va partir en vrille...
    Exactement ce qu'il ne faut pas faire !

    Franck t'a mis sur la piste, je complète en te donnant ça, depuis l'excellent site d'efg (malheureusement de + en + out-of-date, les liens mourant les uns après les autres pour cause de réorganisation des sites concernés, je pense... ) :
    Biff Kadidlehopper's UseNet Post to get/set the dpi in a bitmap file or bitmap image (the biXPelsPerMeter and biYPelsPerMeter values)
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 17
    Points : 17
    Points
    17
    Par défaut conservation définition d'image
    Citation Envoyé par Jipété Voir le message
    Salut.

    Oui, ça semble normal, puisque tu es en train de figer ton programme avec des valeurs en dur calculées depuis ta machine, qui utilise ton imprimante ! Ailleurs ça sera différent, et donc ça va partir en vrille...
    Exactement ce qu'il ne faut pas faire !

    Franck t'a mis sur la piste, je complète en te donnant ça, depuis l'excellent site d'efg (malheureusement de + en + out-of-date, les liens mourant les uns après les autres pour cause de réorganisation des sites concernés, je pense... ) :
    Cete fois c'est résolu!
    Le logiciel est produit sur un PC avec W98 connecté à l'imprimante A.
    Le fichier exe fonctionne sur tout autre PC mais créait des ennuis lors de l'impression .Je me suis aperçu que dnas la procédure d'impression où j'utilisais 'GetDevice ....' pour limprimante je ne pouvais faire qu'un calcul à partir de cette valeur,la 2° fois que je l'utilisais cette valeur était 0.
    Donc dans une procédure pour préparer l'impression je stocke cette valeur dans un Edit et ainsi dans la procédure d'impression je peux l'utiliser plusieurs fois.
    Evidemment il faut que l'imprimante qui sera utilisée soit l'imprimante par défaut;

    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
    procedure prépa
    ............
     
    h:=Printer.Handle;
    Edit7.text:=IntToStr(getDeviceCaps(h,HORZRES));
    Edit8.Text:=IntToStr(GetDeviceCaps(hVERTRES));
    PrintDialog1.Execute;
    end;
     
    procedure impression
    .............................
     
    //valeur du km en pi sur l'imprimante
    imppikm:=5StrToint(Edit7.Text)/GetDeviceCaps(h,HORZSIZE))*40;
    //coefficient pour réduire les dimensions de la carte à 40 mm par km
    //le nombre de pi par km sur l'écran a été gardé dans Edïkm
    cof:=imppikm/StrToFloat(Edpikm.Text);
    bmpimp.loadfromFile('C:\.............); 
    //d'où les dimensions du bit map à dessiner dans le Canvas de l'imprimante
      Trunc(bmpimp.height*cof)
      Trunc(bmpimp.Width*cof)

Discussions similaires

  1. [PPT-2010] Conservation lien hypertext image ppt en pdf
    Par carlux3 dans le forum Powerpoint
    Réponses: 0
    Dernier message: 02/05/2013, 13h24
  2. Réponses: 6
    Dernier message: 28/11/2012, 00h57
  3. MOSS 2007 Définition d'une étentue image
    Par royto dans le forum SharePoint
    Réponses: 1
    Dernier message: 19/04/2007, 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