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 :

Image couleur->image noir/blanc


Sujet :

C++Builder

  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 3
    Par défaut Image couleur->image noir/blanc
    Bonjour à tous.
    Bon j'ai un gros gros problème...j'ai aucune connaissance en se qui concerne le traitement des images sur Borland C++.
    alors voila, quelqu'un saurait-il me dire comment gérer des images tout format (BMP, JPeg, ...) dans ce language?...(déclaration et tout le tralala)
    D'autre part, je dois traiter des images en noir et blanc...pouvez vous m'indiquer la fonction faisant cette convertion! et si nécessaire les comprosants ki réalisent celà!
    enfin (LE PLUS IMPORTANT!!) je sais qu'une image en niveaux de gris n'est en fait qu'une matrice de ces niveaux de gris justement! comment lire cette matrcie (voir l'image en matrice)?

    Merci.

  2. #2
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    Salut,
    Une image peut être lu avec le composant Timage de C++ Builder. Tu peux charger n'importe quel type d'image (même s'il est concu plus pour des image BMP) la modification d'une image se fera par la lecture et la modification des pixels de cette image (la matrice dont tu parles)

    Ce composant à la propriété Pixel (expl: Image1->Canvas->Pixels[X][Y]) pour lire ou modifier l'image un pixel à une couleur composé de 3 couleurs (Red Green Blue).
    Pour la transformation en noir et blanc il y a plusieurs méthodes wikipédia décrit ca très bien. Perso je me suis fait un logiciel de traitement d'image pour régler:
    le contraste, la luminosité et les effets ...
    Je n'ai pas trouvé de fonction, mais travaillé directement les pixels.

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Par défaut
    bandit_boy j'espère que tu n'as pas écrit ton programme en utilisant la propriété Pixels que tu cites....elle est terriblement lente.

    Un peu plus hardue à manipuler mais infiniement plus rapide, la propriété (ou méthode je ne sais plus) ScanLine est bien plus intéressante : elle te donne accès via un seul appel de méthode à l'ensemble des pixels d'une ligne de ton image !

  4. #4
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    C'est exact, mais j'ai utilisé la méthode très lente en passant par l'accès à chacun des pixels.
    Il est vrai que pour un algorithme optimisé c'est mieux de prendre ScanLine.

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Par défaut
    Oui, la différence de vitesse est tout simplement hallucinante.

  6. #6
    Membre averti
    Inscrit en
    Décembre 2006
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 36
    Par défaut
    slt, j'ai chercher cette méthode (ou propriété) dans le help mais j'ai pas trouvé alor si vous pouvez me dire dans quelle biblio elle se trouve...

  7. #7
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Par défaut
    C'est une méthode de la classe TBitmap.

  8. #8
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Salut amintek:
    Voici ce que cela dit
    Offre un accès indicé à chaque ligne de pixels.
    __property void * ScanLine[int Row] = {read=GetScanline};
    Description
    ScanLine n'est utilisée qu'avec les DIB (Device Independent Bitmaps) pour les outils d'édition d'images manipulant les pixels à un bas niveau.
    et l'exemple
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    Graphics::TBitmap *pBitmap = new Graphics::TBitmap();
    // Cet exemple montre le dessin direct dans le Bitmap
    Byte *ptr;
    try
    {
    pBitmap->LoadFromFile("MyBitmap.png");
    for (int y = 0; y < pBitmap->Height; y++)
    {
    ptr = (Byte *)pBitmap->ScanLine[y];
    for (int x = 0; x < pBitmap->Width; x++)
    ptr[x] = (Byte)y;
    }
    Canvas->Draw(0,0,pBitmap);
    }
    catch (...)
    {
    ShowMessage("Impossible de charger ou modifier le bitmap");
    }
    delete pBitmap;
    }

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 385
    Par défaut
    slt
    si tu peut utiliser une bibliotheque optimisée ( openil : sourgeforce.net) sa se fait en 1 sec.

  10. #10
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 417
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 417
    Par défaut
    Salut !

    Pixels a l'avantage d'être polymorphe car renvoie une couleur quelque soit la définition du bitmap.
    ScanLine l'est moins puisque pour une définition en 8 bits, on obtient un pointeur vers l'index d'une couleur dans la palette et non pas un pointeur vers les composantes.
    Or pour la conversion en niveau de gris on a besoin des composantes R,G,B :

    niveau de gris = 59% de vert + 30% de rouge + 11% de bleu

    C'est la proportion proche (il me semble) du N&B argentique.

    On peut éventuellement modifier les rapports selon la luminosité ou le contraste.

    Pour récupérer ces niveaux de gris, il existe plusieurs solutions qui dépendent de ce qu'il y a à faire.

    - un tableau de Byte pour mettre en oeuvre un ou plusieurs calculs

    - un bitmap 8 bits dont la palette est effectivement montée avec les 256 teintes de gris (parfait pour économiser la ressource mémoire)

    - un bitmap 24 bits dont chaque pixel aura pour composantes : R = G = B = niveau_de_gris

    Un bitmap peut-être envisagé si on doit représenter le résultat sous la forme d'une image.

    A plus !

Discussions similaires

  1. Différence entre Image couleur et image en Niveau de gris
    Par eviasra dans le forum Traitement d'images
    Réponses: 3
    Dernier message: 20/05/2015, 20h06
  2. [Débutant] Manipulation d'images : intégrer une image dans une image
    Par noscollections dans le forum VB.NET
    Réponses: 2
    Dernier message: 17/10/2014, 11h51
  3. image couleur vers image en niveaux de gris
    Par catrina13 dans le forum Images
    Réponses: 3
    Dernier message: 15/03/2013, 17h41
  4. Transformation image couleur en noir et blanc
    Par AuraHxC dans le forum Qt
    Réponses: 13
    Dernier message: 20/10/2009, 22h33
  5. diffirencier entre les images couleurs et les noir et blanc
    Par passion_info dans le forum C++Builder
    Réponses: 3
    Dernier message: 18/05/2005, 14h15

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