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

Windows Forms Discussion :

les images indexées


Sujet :

Windows Forms

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 9
    Points : 11
    Points
    11
    Par défaut les images indexées
    SVP quelq'un peut m'aider je veux transformer une images couleurs RGB 32bits en images indexée 8 bits

  2. #2
    Membre éclairé Avatar de chamamo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    588
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 588
    Points : 735
    Points
    735
    Par défaut
    Je ne sais pas pour les Bits, mais pour la résolution regarde la méthode SetResolution de la classe Bitmap, ou:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Bitmap monBitmap = new Bitmap(@"C:\image.bmp");
    Bitmap monBitmap2 = new Bitmap(monBitmap , new Size(50, 50));

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 9
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par chamamo Voir le message
    Je ne sais pas pour les Bits, mais pour la résolution regarde la méthode SetResolution de la classe Bitmap, ou:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Bitmap monBitmap = new Bitmap(@"C:\image.bmp");
    Bitmap monBitmap2 = new Bitmap(monBitmap , new Size(50, 50));
    new Bitmap nous donne une image de format 32bpp mais , j'ai fait des traitement sur une image de 32 bpp et je veux la convertir en image indexée de 8 bits

  4. #4
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    bonjour hadjer91

    C'est n'est pas simple mais voici un code qui utilise les Class
    - ColorPalette(gere un tableau de couleur.Nb:ColorPalette n'as pas de constructeur New ,il doit etre cree à partir du bitmap d'origine)

    - BitmapData qui utilise un code "unsafe" car on sette les pixels en memoire non managee.....Bitmap.SetPixel ne fonctionne pas sur les images indexees avec Palette...
    Les etapes sont les suivantes :
    1/
    - on charge une image couleur RGB32bits des resources....
    - on l'affiche d'abord dans picbox1.
    -on cree un bitmap couleur à partir de notre image....
    -on l'envoie à ConvertToMonochrome( etapes identiques pour ConvertToIndexedColor)
    2/ConvertToMonochrome :
    - cree un bitmap temp. à partir de notre bitmap couleur
    - cree une instance de ColorPalette du bmp temp.et la recolorize en niveaux de gris
    - colorize ensuite les pixels un-à-un en "noir et blanc" (voir formule)

    - le bitmap temp est renvoye et affiche dans picbox2 (idem pour le cas couleur dans PicBox3)
    code behind .cs du winform:

    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Drawing.Imaging;
    namespace WinImageIndexPalette
    {
        public partial class Form1 : Form
        {
     
            public Form1()
            {
                InitializeComponent();
            }
     
     
            private void button1_Click(object sender, EventArgs e)
            {
                Image img = WinImageIndexPalette.Properties.Resources.image1;
     
                //affiche l'image source
     
                pictureBox1.Image = img;
     
                //cree un bitmap à partir de l'image source
     
                Bitmap bmpColor =new Bitmap( img);
     
                //conversion en monochrome Format8bppIndexed
     
                pictureBox2.Image = ConvertToMonochrome(bmpColor);
                pictureBox2.Update();
     
                //cree un autre  bitmap à partir de l'image source
     
                bmpColor = new Bitmap(img);
     
                //conversion en couleur  palette Format8bppIndexed
     
                pictureBox3.Image = ConvertToIndexedColor(bmpColor);
                pictureBox3.Update();
            }
     
            static unsafe Bitmap ConvertToMonochrome(Bitmap bmpColor)
            {
                int cx = bmpColor.Width;
                int cy = bmpColor.Height;
     
                // Create a new 8-bit indexed bitmap of the same size
     
                Bitmap bmMono = new Bitmap(cx, cy, PixelFormat.Format8bppIndexed);
                bmMono.SetResolution(bmpColor.HorizontalResolution,
                                     bmpColor.VerticalResolution);
     
                //  definit l'instance palette à partir de
                //  bmpColoIndex.Palette car ColorPalette n' as pas 
                //  de constructeur
     
                // recolorie  une palette de gris 
     
                ColorPalette pal = bmMono.Palette;
     
                for (int i = 0; i < pal.Entries.Length; i++)
                    pal.Entries[i] = Color.FromArgb(i, i, i);
     
                bmMono.Palette = pal;
     
                // Because SetPixel won't work with index bitmaps, we need
                //  direct access to the bits
     
                BitmapData bmd = bmMono.LockBits(
                    new Rectangle(Point.Empty, bmMono.Size),
                    ImageLockMode.WriteOnly, PixelFormat.Format8bppIndexed);
     
                // Scan through the pixels, converting color to B&W
     
                Byte* pPixel = (Byte*)bmd.Scan0;
     
                for (int y = 0; y < cy; y++)
                {
                    for (int x = 0; x < cx; x++)
                    {
                        Color clr = bmpColor.GetPixel(x, y);
                        Byte byPixel = (byte)((30 * clr.R + 59 * clr.G + 11 * clr.B) / 100);
                        pPixel[x] = byPixel;
                    }
                    pPixel += bmd.Stride;
                }
     
                bmMono.UnlockBits(bmd);
     
                return bmMono;
            }
            private void button2_Click(object sender, EventArgs e)
            {
     
            }
     
            static unsafe Bitmap ConvertToIndexedColor(Bitmap bmpColor)
            {
     
                int cx = bmpColor.Width;
                int cy = bmpColor.Height;
     
                // Create a new 8-bit indexed bitmap of the same size
     
                Bitmap bmpColoIndex = new Bitmap(cx, cy, PixelFormat.Format8bppIndexed);
                bmpColoIndex.SetResolution(bmpColor.HorizontalResolution,
                                     bmpColor.VerticalResolution);
     
                // definit l'instance palette à partir de
                //  bmpColoIndex.Palette car ColorPalette n' as pas 
                //  de constructeur
     
                ColorPalette pal = bmpColoIndex.Palette;
                Random rnd = new Random();
     
                // recolorie  une palette de couleurs aleatoires
     
                for (int i = 0; i < pal.Entries.Length; i++)
                    pal.Entries[i] = Color.FromArgb(rnd.Next(0, 255), rnd.Next(0, 255), rnd.Next(0, 255));
     
                bmpColoIndex.Palette = pal;
     
                // Because SetPixel won't work with index bitmaps, we need
                //  direct access to the bits
     
                BitmapData bmpData = bmpColoIndex.LockBits(
                    new Rectangle(Point.Empty, bmpColoIndex.Size),
                    ImageLockMode.WriteOnly, PixelFormat.Format8bppIndexed);
     
                // Scan through the pixels, converting color to random color
     
                Byte* pPixel = (Byte*)bmpData.Scan0;
     
                for (int y = 0; y < cy; y++)
                {
                    for (int x = 0; x < cx; x++)
                    {
                        Color clr = bmpColor.GetPixel(x, y);
                        Byte byPixel = (byte)((30 * clr.R + 59 * clr.G + 11 * clr.B) / 200);
                        pPixel[x] = byPixel;
                    }
                    pPixel += bmpData.Stride;
                }
     
                bmpColoIndex.UnlockBits(bmpData);
     
                return bmpColoIndex;
     
     
            }
     
     
        }
    }
    bon code................

Discussions similaires

  1. [Débutant] les images indexées
    Par Hadjer91 dans le forum C#
    Réponses: 0
    Dernier message: 20/04/2013, 22h38
  2. imwrite avec les images indexées
    Par hamza85 dans le forum MATLAB
    Réponses: 4
    Dernier message: 25/01/2011, 22h42
  3. Peut-on savoir si les images d'un site sont indexées?
    Par laurentinho dans le forum Référencement
    Réponses: 2
    Dernier message: 24/03/2009, 17h43
  4. []filtre sepia pour les images
    Par nabil dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 27/01/2004, 21h41
  5. Des fonctions OGL pour les images de format usuel ?
    Par jamal24 dans le forum OpenGL
    Réponses: 3
    Dernier message: 31/05/2003, 22h59

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