Les bitmaps
Présentation par Renaud Pradenc




                                  Céroce
Au programme
1. Généralités sur le graphisme bitmap
2. Organisation des bitmaps en mémoire
3. Création des bitmaps avec Co...
Généralités
Le pixel


• Un pixel est composé de trois sous-pixels
  de couleurs rouge, vert et bleu
• Varier l’intensité lumineuse de...
La bitmap

• Une bitmap est une grille de pixels
• Les bitmaps sont omni-présentes: tout ce
  qui est affiché à l’écran, to...
Graphismes vectoriels


• Ils sont définis par des vecteurs plutôt que
  par des pixels
• Ils doivent être rasterisés pour ...
Pourquoi manipuler les
      bitmaps ?
• Pour appliquer des effets
• Pour générer des images
• Pour en extraire de l’infor...
Organisation en
  mémoire
Organisation de base
Quelle est l’adresse d’un pixel
 d’après ses coordonnées ?
• la même quantité de mémoire est allouée ...
Exemple: 8 bits/pixel


• 8 bits/pixel = 256 niveaux de gris
  (0 = noir, 255= blanc)
• Dimensions: 15 x 10 pixels
m ap                      15 colonnes
ad   rBi t

                0    1   2   3   4   5   6   7   8   9   10 11 12 13 14
...
Exemple: 32 bits/pixel

• 1 octet de rouge
  1 octet de vert
  1 octet de bleu
  1 octet inutilisé
  = 224 couleurs (envir...
ap                   5 colonnes
       itm
adrB

                0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
   4 li...
Pour simplifier les accès, on utilise une
 structure:
                 typedef struct
                 {
                 	...
Octets d’alignement
 • Pour des raisons de performances, il se
   peut que des octets d’alignements
   (inutilisés) soient...
Création
Formats gérés par CG
Color Space   Pixel format and bitmap information constant

Gray          8 bpp, 8 bpc,kCGImageAlphaN...
Créer une bitmap
CGContextRef CGBitmapContextCreate (
   void *data,
   size_t width,
   size_t height,
   size_t bitsPerC...
Afficher une bitmap
1) Transformer le CGBitmapContext en
CGImage:
   CGImageRef CGBitmapContextCreateImage (
      CGContex...
Obtenir le CGContext
       courant
• Avec Cocoa Touch:
CGContextRef context
  = UIGraphicsGetCurrentContext();




• Avec...
Génération d’images
Ex. 1: Bitmap bleue
• Pour écrire vite:
           typedef union
           {
           	 struct
           	 {
         ...
Ex. 2: Vaguelettes
Luminosité



     255




       0                            x
              Période (en pixels)
    ...
Effets
Désaturation

• Approche naïve: simple moyenne
  gris =(R + V + B)/3
• Plus réaliste:
  luminance = 0,3 R + 0,59 V + 0,11 B
Bruit

• Principe: Générer un nombre aléatoire
  entre 0 et 255.
• On règle la proportion du bruit / pixel
  d’entrée.
Matrice de convolution
Calculer le pixel en appliquant des coefficients au
pixel central et les pixels alentours.
         ...
Matrices de convolution
    1    1     1    1   2    1       0   0    0
    1    1     1    2   4    2       1   1    1
  ...
Vous avez faim ?

• Les bitmaps révèlent une grande variété
  d’applications.
• Il s’agit de développement de bas niveau
 ...
La suite…


 Core Image
À bientôt !
Code source des exemples:
http://www.renaudpradenc.com/cocoaheads


Me contacter:
renaud@ceroce.com
          ...
Prochain SlideShare
Chargement dans…5
×

Bitmaps

1 551 vues

Publié le

Cocoaheads Paris

Publié dans : Voyages, Business
1 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
1 551
Sur SlideShare
0
Issues des intégrations
0
Intégrations
127
Actions
Partages
0
Téléchargements
15
Commentaires
1
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Bitmaps

  1. 1. Les bitmaps Présentation par Renaud Pradenc Céroce
  2. 2. Au programme 1. Généralités sur le graphisme bitmap 2. Organisation des bitmaps en mémoire 3. Création des bitmaps avec Core Graphics 4. Génération d’images 5. Effets sur les images
  3. 3. Généralités
  4. 4. Le pixel • Un pixel est composé de trois sous-pixels de couleurs rouge, vert et bleu • Varier l’intensité lumineuse de ces trois segments permet de régler la couleur
  5. 5. La bitmap • Une bitmap est une grille de pixels • Les bitmaps sont omni-présentes: tout ce qui est affiché à l’écran, toutes les images numérisées
  6. 6. Graphismes vectoriels • Ils sont définis par des vecteurs plutôt que par des pixels • Ils doivent être rasterisés pour être affichés
  7. 7. Pourquoi manipuler les bitmaps ? • Pour appliquer des effets • Pour générer des images • Pour en extraire de l’information • Pour implémenter des systèmes de cache
  8. 8. Organisation en mémoire
  9. 9. Organisation de base Quelle est l’adresse d’un pixel d’après ses coordonnées ? • la même quantité de mémoire est allouée à chaque pixel • les pixels se suivent en mémoire • la bitmap se lit de gauche à droite, et de haut en bas
  10. 10. Exemple: 8 bits/pixel • 8 bits/pixel = 256 niveaux de gris (0 = noir, 255= blanc) • Dimensions: 15 x 10 pixels
  11. 11. m ap 15 colonnes ad rBi t 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 … 30 10 lignes 45 60 75 90 105 120 135 149 adrPixel = adrBitmap + ligne × largeur + colonne
  12. 12. Exemple: 32 bits/pixel • 1 octet de rouge 1 octet de vert 1 octet de bleu 1 octet inutilisé = 224 couleurs (environ 16 millions) • Dimensions 5 x 4 pixels
  13. 13. ap 5 colonnes itm adrB 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 4 lignes 20 40 60 76 77 78 79 adrPixel = adrBitmap + 4(ligne × largeur + colonne)
  14. 14. Pour simplifier les accès, on utilise une structure: typedef struct { UInt8 r; UInt8 g; UInt8 b; UInt8 x; } PixelRGBx; Avec un pointeur: PixelRGBx *pixelPtr; pixelPtr = (PixelRGBx *)bitmapPtr + ligne*largeur + colonne;
  15. 15. Octets d’alignement • Pour des raisons de performances, il se peut que des octets d’alignements (inutilisés) soient ajoutés en fin de ligne. PixelRGBx *pixelPtr; pixelPtr = (PixelRGBx *)bitmapPtr + ligne*(largeur + alignement) + colonne; ➡Y prendre garde si on récupère une bitmap créée par le système d’exploitation.
  16. 16. Création
  17. 17. Formats gérés par CG Color Space Pixel format and bitmap information constant Gray 8 bpp, 8 bpc,kCGImageAlphaNone Null 8 bpp, 8 bpc, kCGImageAlphaOnly RGB 16 bpp, 5 bpc, kCGImageAlphaNoneSkipFirst RGB 32 bpp, 8 bpc, kCGImageAlphaNoneSkipFirst RGB 32 bpp, 8 bpc, kCGImageAlphaNoneSkipLast RGB 32 bpp, 8 bpc, kCGImageAlphaPremultipliedFirst RGB 32 bpp, 8 bpc, kCGImageAlphaPremultipliedLast CMYK 32 bpp, 8 bpc, kCGImageAlphaNone Gray 32 bpp, 32 bpc, kCGImageAlphaNone|kCGBitmapFloatComponents RGB 128 bpp, 32 bpc, kCGImageAlphaNoneSkipLast |kCGBitmapFloatComponents RGB 128 bpp, 32 bpc, kCGImageAlphaPremultipliedLast |kCGBitmapFloatComponents CMYK 128 bpp, 32 bpc, kCGImageAlphaNone |kCGBitmapFloatComponents Gray 16 bpp, 16 bpc, kCGImageAlphaNone RGB 64 bpp, 16 bpc, kCGImageAlphaPremultipliedLast RGB 64 bpp, 16 bpc, kCGImageAlphaNoneSkipLast CMYK 64 bpp, 16 bpc, kCGImageAlphaNone
  18. 18. Créer une bitmap CGContextRef CGBitmapContextCreate ( void *data, size_t width, size_t height, size_t bitsPerComponent, size_t bytesPerRow, CGColorSpaceRef colorspace, CGBitmapInfo bitmapInfo );
  19. 19. Afficher une bitmap 1) Transformer le CGBitmapContext en CGImage: CGImageRef CGBitmapContextCreateImage ( CGContextRef c ); 2) L’afficher dans un CGContext: void CGContextDrawImage ( CGContextRef c, CGRect rect, CGImageRef image );
  20. 20. Obtenir le CGContext courant • Avec Cocoa Touch: CGContextRef context = UIGraphicsGetCurrentContext(); • Avec Cocoa Mac: CGContextRef context = [[NSGraphicsContext currentContext] graphicsPort];
  21. 21. Génération d’images
  22. 22. Ex. 1: Bitmap bleue • Pour écrire vite: typedef union { struct { UInt8 r; UInt8 g; UInt8 b; UInt8 x; } component; UInt32 all; } PixelRGBx;
  23. 23. Ex. 2: Vaguelettes Luminosité 255 0 x Période (en pixels) = 2π
  24. 24. Effets
  25. 25. Désaturation • Approche naïve: simple moyenne gris =(R + V + B)/3 • Plus réaliste: luminance = 0,3 R + 0,59 V + 0,11 B
  26. 26. Bruit • Principe: Générer un nombre aléatoire entre 0 et 255. • On règle la proportion du bruit / pixel d’entrée.
  27. 27. Matrice de convolution Calculer le pixel en appliquant des coefficients au pixel central et les pixels alentours. N -2 -1 0 pixelCourant = ( -2.pixelNW -1.pixelN +0.pixelNE W -1 1 1 E -1.pixelW +1.pixelC +1.pixelE +0.pixelSW +1.pixelS +2.pixelSE) 0 1 2 / (-2 -1 +0 -1 +1 +1 +0 +1 +2)) S
  28. 28. Matrices de convolution 1 1 1 1 2 1 0 0 0 1 1 1 2 4 2 1 1 1 1 1 1 1 2 1 0 0 0 Flou Flou gaussien Flou horizontal 1 1 1 1 1 1 2 1 0 1 -16 1 1 -8 1 1 1 -1 1 1 1 1 1 1 0 -1 -2 Détection Accentuation Bas-relief de bords
  29. 29. Vous avez faim ? • Les bitmaps révèlent une grande variété d’applications. • Il s’agit de développement de bas niveau (attention aux pointeurs et aux tailles des données). • Tous les calculs sont effectués par le CPU.
  30. 30. La suite… Core Image
  31. 31. À bientôt ! Code source des exemples: http://www.renaudpradenc.com/cocoaheads Me contacter: renaud@ceroce.com Céroce

×