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

Delphi Discussion :

Transformer un bitmap


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    185
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2006
    Messages : 185
    Par défaut Transformer un bitmap
    Bonsoir,

    Je dois transformer un bitmap quelconque en un bitmap "allegé", c'est à dire en monochrome et dont la taille ne peut dépasser 480*256 Pixels (sera envoyer sur un écran monochrome).

    J'ai bien lu quelques infos sur le bitmap, mais je dois dire que j'ai du mal à tout saisir.

    Si quelqu'un aurait des explications ou des exemples (simple ), ce serait bien.

    Quelqu'un peut-il me confirmer qu'une variable de type HDC est juste un handle sur un objet quelconque ???

    Merci à tous

  2. #2
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    Bonjour,

    pour le bitmap monochrome, j'imagine qu'il faut trouver un algorithme qui ne se contente pas de passer chaque pixel en noir ou blanc, mais qui tient compte des pixels voisins pour faire un tramé...

    sinon le HDC est matérialisé sous Delphi par le Canvas (son Handle est un HDC), et un Canvas c'est un ensemble de méthodes de dessin, sur "quelquechose".
    si c'est un Canvas d'imprimante il envoie des ordres d'impression, si c'est celui d'un bitmap, le dessin sera réalisé dans le bitamp, si c'est celui d'une fiche ou plus généralement d'un "control", il le sera à l'écran.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    185
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2006
    Messages : 185
    Par défaut
    Bonour Paul,

    Effectivement, je dois convertir le bitmap en bitmap manochromer 2 bits. Un peu comme on ferait dans paint avec fichier/enregistrer sous --> type monochrome.

    La mémoire externe du terminal, sur lequel j'enverrai l'image ne faisant que 64 Ko et son écran étant un un écran monochrome CGA (si je ne dis pas de bêtise), je ne peux me permettre de lui envoyer un logo trop gourmand.

    De plus je dois également adapté sa taille pour qu'il ne dépasse pas les 480*256 pixels.

    En parlant de paint, ne serais t'il pas possible de l'utilser pour sauver le bitmap sous ... ? et modifier sa taille.

    Merci de votre réponse.

  4. #4
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    non paint c'est pas terrible

    mais XnView possède un tas de filtre et tout ce qu'il faut pour transformer les images, et il me semble qu'il existe une API, mais je n'ai jamais creusé la question...
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  5. #5
    Membre Expert
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 542
    Billets dans le blog
    10
    Par défaut
    Voici un exemple de manipulation d'image sous delphi
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
      if FileExists(st_src) then
      begin
        st2 := st_dest + Copy(st1, 1, pos('.', st1)-1) + 'a.jpg';
        st3 := st_dest + Copy(st1, 1, pos('.', st1)-1) + 'b.jpg';
        if not FileExists(st2) and (f1(st2) = 0) then
        begin
          JPEG1 := TJPEGImage.Create;
          BMP1 := TBitmap.Create;
          try
            JPEG1.LoadFromFile(st_src);
            BMP1.assign(JPEG1);
            BMP1.Dormant;             // Libère les ressources GDI
            BMP1.FreeImage;           // Libère la mémoire.
            JPEG1.PixelFormat := jf8Bit;
            JPEG1.Grayscale := True;
            JPEG1.CompressionQuality := 66;
            JPEG1.Scale := jsQuarter;
            JPEG1.assign(BMP1);
            //JPEG1.Compress;
            JPEG1.SaveToFile(st2);
          except
            on EInvalidGraphic do JPEG1 := nil;
          end;
          Application.ProcessMessages;
          jpeg1.Free;
          BMP1.Free;
          Application.Initialize
        end ;
        if FileExists(st2) and not FileExists(st3) and (f1(st2) <> 0) and (f1(st3) = 0) then
        begin
          JPEG1 := TJPEGImage.Create;
          BMP1 := TBitmap.Create;
          try
            JPEG1.LoadFromFile(st2);
            BMP1.assign(JPEG1);
            BMP1.Dormant;             // Libère les ressources GDI
            BMP1.FreeImage;           // Libère la mémoire.
            JPEG1.PixelFormat := jf8Bit;
            JPEG1.Grayscale := True;
            JPEG1.CompressionQuality := 66;
            JPEG1.Scale := jsQuarter;
            JPEG1.assign(BMP1);
            //JPEG1.Compress;
            JPEG1.SaveToFile(st3);
          except
            on EInvalidGraphic do JPEG1 := nil;
          end ;
          Application.ProcessMessages;
          jpeg1.Free;
          BMP1.Free;
        end ;
      end;
    Pour ce qui te concerne utilise la fonction stretch du composant image qui chargera ton image au format voulu

  6. #6
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    il est question d'image monochrome et non d'image en niveau de gris

    je viens de faire un test rapide avec XnView

    prenons une image colorée de départ
    Nom : sm1.jpg
Affichages : 226
Taille : 13,7 Ko

    si je l'enregistre en bitmap monochrome sous Paint c'est très moche
    Nom : sm2.jpg
Affichages : 266
Taille : 12,2 Ko

    XnView propose l'algorithme Floyd Steinberg qui donne ceci
    Nom : sm3.jpg
Affichages : 223
Taille : 43,6 Ko

    et quand on a un nom on trouve des solutions, des fois pas très loin d'ici (décidément t'es trop fort Eric)
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 132
    Par défaut
    Il y a aussi pour transformer une image en monochrome:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Image1.Picture.Bitmap.Monochrome := True;
    avec:
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Image1.Picture.LoadFromFile('monimage.bmp');
    Mais dans ce cas, on ne peut maîtriser le seuil (valeur au dela de laquelle on a du noir et en deça, du blanc).

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

Discussions similaires

  1. [canvas] Bitmap transformer une couleur en transparent
    Par Arcantos512 dans le forum Composants graphiques
    Réponses: 4
    Dernier message: 12/11/2010, 23h27
  2. Transformer une Bitmap RGB en niveau de gris
    Par mathylde dans le forum Traitement d'images
    Réponses: 4
    Dernier message: 23/07/2009, 10h43
  3. Lecture d'une image bitmap
    Par Geronimo dans le forum x86 32-bits / 64-bits
    Réponses: 18
    Dernier message: 28/06/2002, 12h01
  4. FFT(Fast Fourier Transform)
    Par IngBen dans le forum Traitement du signal
    Réponses: 6
    Dernier message: 23/05/2002, 16h35
  5. Comment faire pour créer un bitmap
    Par GliGli dans le forum C++Builder
    Réponses: 2
    Dernier message: 24/04/2002, 15h41

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