SlideShare uma empresa Scribd logo
1 de 31
Baixar para ler offline
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 Core Graphics
4. Génération d’images
5. Effets sur les images
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 ces trois
  segments permet de régler la couleur
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
Graphismes vectoriels


• Ils sont définis par des vecteurs plutôt que
  par des pixels
• Ils doivent être rasterisés pour être affichés
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
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 à
  chaque pixel
• les pixels se suivent en mémoire
• la bitmap se lit de gauche à droite, et de
  haut en bas
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

                15 16 17 …

                30
10 lignes




                45

                60

                75

                90

               105

               120

               135                                                   149


            adrPixel = adrBitmap + ligne × largeur + colonne
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
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)
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;
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.
Création
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
Créer une bitmap
CGContextRef CGBitmapContextCreate (
   void *data,
   size_t width,
   size_t height,
   size_t bitsPerComponent,
   size_t bytesPerRow,
   CGColorSpaceRef colorspace,
   CGBitmapInfo bitmapInfo
);
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
  );
Obtenir le CGContext
       courant
• Avec Cocoa Touch:
CGContextRef context
  = UIGraphicsGetCurrentContext();




• Avec Cocoa Mac:
CGContextRef context
  = [[NSGraphicsContext currentContext] graphicsPort];
Génération d’images
Ex. 1: Bitmap bleue
• Pour écrire vite:
           typedef union
           {
           	 struct
           	 {
           	 	 UInt8	 r;
           	 	 UInt8	 g;
           	 	 UInt8	 b;
           	 	 UInt8	 x;
           	
           	 } component;
           	
           	 UInt32 all;

           } PixelRGBx;
Ex. 2: Vaguelettes
Luminosité



     255




       0                            x
              Période (en pixels)
                    = 2π
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.
         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
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
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.
La suite…


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


Me contacter:
renaud@ceroce.com
                                  Céroce

Mais conteúdo relacionado

Destaque

Module 2 : Les fondements : principes, concepts et pratiques exemplaires
Module 2 : Les fondements : principes, concepts et pratiques exemplairesModule 2 : Les fondements : principes, concepts et pratiques exemplaires
Module 2 : Les fondements : principes, concepts et pratiques exemplairesCanadian Patient Safety Institute
 
Ibrahim: Les Connaissances traditionnelles des Peuples autochtones face aux c...
Ibrahim: Les Connaissances traditionnelles des Peuples autochtones face aux c...Ibrahim: Les Connaissances traditionnelles des Peuples autochtones face aux c...
Ibrahim: Les Connaissances traditionnelles des Peuples autochtones face aux c...AfricaAdapt
 
Procédure de test de erreur ( probabilité )
Procédure de test de erreur ( probabilité )Procédure de test de erreur ( probabilité )
Procédure de test de erreur ( probabilité )Taha Can
 
Performance et utopisme technologique
Performance et utopisme technologiquePerformance et utopisme technologique
Performance et utopisme technologiquePerformanceetUtopisme
 
AME-GALLERY -Hasch-Variation sur la peinture d'Antoine Mercier
AME-GALLERY -Hasch-Variation sur la peinture d'Antoine MercierAME-GALLERY -Hasch-Variation sur la peinture d'Antoine Mercier
AME-GALLERY -Hasch-Variation sur la peinture d'Antoine MercierAntoine Mercier-ame
 
Libreta De Calificaciones
Libreta  De  CalificacionesLibreta  De  Calificaciones
Libreta De CalificacionesMARISSA208
 
Fdievnjhefuiobgrv
FdievnjhefuiobgrvFdievnjhefuiobgrv
Fdievnjhefuiobgrvciviceg
 
Les filières industrielles dans les énergies intermittentes
Les filières industrielles dans les énergies intermittentesLes filières industrielles dans les énergies intermittentes
Les filières industrielles dans les énergies intermittentesGuillaume Ebel
 
Les leaders et les initiatives Apollo 13
Les leaders et les initiatives Apollo 13Les leaders et les initiatives Apollo 13
Les leaders et les initiatives Apollo 13201020112014
 
DIGEST KEYNOTE "INNOVER GRACE AU HIGH TECH ISRAELIEN" DU MARDI 1ER JUILLET 2014
DIGEST KEYNOTE "INNOVER GRACE AU HIGH TECH ISRAELIEN" DU MARDI 1ER JUILLET 2014DIGEST KEYNOTE "INNOVER GRACE AU HIGH TECH ISRAELIEN" DU MARDI 1ER JUILLET 2014
DIGEST KEYNOTE "INNOVER GRACE AU HIGH TECH ISRAELIEN" DU MARDI 1ER JUILLET 2014MORE THAN DIGITAL
 
Eco event
Eco eventEco event
Eco eventInovEco
 
Saisonende des VCW
Saisonende des VCWSaisonende des VCW
Saisonende des VCWwebmastervcw
 
C H I F L E S V I V A R
C H I F L E S  V I V A RC H I F L E S  V I V A R
C H I F L E S V I V A Rvegajulca
 
Eco Evenement
Eco  EvenementEco  Evenement
Eco EvenementInovEco
 

Destaque (20)

Module 2 : Les fondements : principes, concepts et pratiques exemplaires
Module 2 : Les fondements : principes, concepts et pratiques exemplairesModule 2 : Les fondements : principes, concepts et pratiques exemplaires
Module 2 : Les fondements : principes, concepts et pratiques exemplaires
 
Ibrahim: Les Connaissances traditionnelles des Peuples autochtones face aux c...
Ibrahim: Les Connaissances traditionnelles des Peuples autochtones face aux c...Ibrahim: Les Connaissances traditionnelles des Peuples autochtones face aux c...
Ibrahim: Les Connaissances traditionnelles des Peuples autochtones face aux c...
 
Theme 6
Theme 6Theme 6
Theme 6
 
Joyeux noel
Joyeux noelJoyeux noel
Joyeux noel
 
Procédure de test de erreur ( probabilité )
Procédure de test de erreur ( probabilité )Procédure de test de erreur ( probabilité )
Procédure de test de erreur ( probabilité )
 
Performance et utopisme technologique
Performance et utopisme technologiquePerformance et utopisme technologique
Performance et utopisme technologique
 
AME-GALLERY -Hasch-Variation sur la peinture d'Antoine Mercier
AME-GALLERY -Hasch-Variation sur la peinture d'Antoine MercierAME-GALLERY -Hasch-Variation sur la peinture d'Antoine Mercier
AME-GALLERY -Hasch-Variation sur la peinture d'Antoine Mercier
 
Les initiatives
Les initiativesLes initiatives
Les initiatives
 
Libreta De Calificaciones
Libreta  De  CalificacionesLibreta  De  Calificaciones
Libreta De Calificaciones
 
Fdievnjhefuiobgrv
FdievnjhefuiobgrvFdievnjhefuiobgrv
Fdievnjhefuiobgrv
 
1s prob
1s prob1s prob
1s prob
 
BOLSAS DE PLÁSTICO
BOLSAS DE PLÁSTICOBOLSAS DE PLÁSTICO
BOLSAS DE PLÁSTICO
 
Les filières industrielles dans les énergies intermittentes
Les filières industrielles dans les énergies intermittentesLes filières industrielles dans les énergies intermittentes
Les filières industrielles dans les énergies intermittentes
 
Les leaders et les initiatives Apollo 13
Les leaders et les initiatives Apollo 13Les leaders et les initiatives Apollo 13
Les leaders et les initiatives Apollo 13
 
DIGEST KEYNOTE "INNOVER GRACE AU HIGH TECH ISRAELIEN" DU MARDI 1ER JUILLET 2014
DIGEST KEYNOTE "INNOVER GRACE AU HIGH TECH ISRAELIEN" DU MARDI 1ER JUILLET 2014DIGEST KEYNOTE "INNOVER GRACE AU HIGH TECH ISRAELIEN" DU MARDI 1ER JUILLET 2014
DIGEST KEYNOTE "INNOVER GRACE AU HIGH TECH ISRAELIEN" DU MARDI 1ER JUILLET 2014
 
Eco event
Eco eventEco event
Eco event
 
Saisonende des VCW
Saisonende des VCWSaisonende des VCW
Saisonende des VCW
 
HAPPY NEW YEAR !!
HAPPY NEW YEAR !!HAPPY NEW YEAR !!
HAPPY NEW YEAR !!
 
C H I F L E S V I V A R
C H I F L E S  V I V A RC H I F L E S  V I V A R
C H I F L E S V I V A R
 
Eco Evenement
Eco  EvenementEco  Evenement
Eco Evenement
 

Semelhante a Bitmaps

Présentation du logiciel PixInsight
Présentation du logiciel PixInsightPrésentation du logiciel PixInsight
Présentation du logiciel PixInsightDidier Walliang
 
Cour d'informatique c++
Cour d'informatique c++Cour d'informatique c++
Cour d'informatique c++AHMADELHADDADI
 
Optimiser Le Poids Des Photos
Optimiser Le Poids Des PhotosOptimiser Le Poids Des Photos
Optimiser Le Poids Des Photosalexartiste
 
Bases de données image : structuration de l'espace des descripteurs et recher...
Bases de données image : structuration de l'espace des descripteurs et recher...Bases de données image : structuration de l'espace des descripteurs et recher...
Bases de données image : structuration de l'espace des descripteurs et recher...Guillaume MOCQUET
 
Basics of Mpeg 4 Video Compression
Basics of Mpeg 4 Video CompressionBasics of Mpeg 4 Video Compression
Basics of Mpeg 4 Video CompressionMarius Preda PhD
 
[Paris Unity3D meetup] - Système d’instancing dans endless legend reskin
[Paris Unity3D meetup] - Système d’instancing dans endless legend reskin[Paris Unity3D meetup] - Système d’instancing dans endless legend reskin
[Paris Unity3D meetup] - Système d’instancing dans endless legend reskinBeMyApp
 
Presentation Paolo
Presentation PaoloPresentation Paolo
Presentation Paologuest0d4145
 
Algorithmique graphique
Algorithmique graphiqueAlgorithmique graphique
Algorithmique graphiqueTheYacine
 
cours-gratuit.com--CoursMatlab-id4508 (1).pdf
cours-gratuit.com--CoursMatlab-id4508 (1).pdfcours-gratuit.com--CoursMatlab-id4508 (1).pdf
cours-gratuit.com--CoursMatlab-id4508 (1).pdfNarjiss Hach
 
Ingénierie de la performance au sein des mégadonnées
Ingénierie de la performance au sein des mégadonnéesIngénierie de la performance au sein des mégadonnées
Ingénierie de la performance au sein des mégadonnéesDaniel Lemire
 
Net duino et le .net micro framework
Net duino et le .net micro frameworkNet duino et le .net micro framework
Net duino et le .net micro frameworkVincent Hubert
 
representation_numerique_de_l_information_annote.ppt
representation_numerique_de_l_information_annote.pptrepresentation_numerique_de_l_information_annote.ppt
representation_numerique_de_l_information_annote.pptphysikcollege
 
Isbs slides 2010
Isbs slides 2010Isbs slides 2010
Isbs slides 2010RMwebsite
 

Semelhante a Bitmaps (20)

Présentation du logiciel PixInsight
Présentation du logiciel PixInsightPrésentation du logiciel PixInsight
Présentation du logiciel PixInsight
 
Compression.pdf
Compression.pdfCompression.pdf
Compression.pdf
 
Compression JPEG
Compression JPEGCompression JPEG
Compression JPEG
 
fiche produit c3x
fiche produit c3xfiche produit c3x
fiche produit c3x
 
Cour d'informatique c++
Cour d'informatique c++Cour d'informatique c++
Cour d'informatique c++
 
Optimiser Le Poids Des Photos
Optimiser Le Poids Des PhotosOptimiser Le Poids Des Photos
Optimiser Le Poids Des Photos
 
Bases de données image : structuration de l'espace des descripteurs et recher...
Bases de données image : structuration de l'espace des descripteurs et recher...Bases de données image : structuration de l'espace des descripteurs et recher...
Bases de données image : structuration de l'espace des descripteurs et recher...
 
fuygfkjhk
fuygfkjhkfuygfkjhk
fuygfkjhk
 
Basics of Mpeg 4 Video Compression
Basics of Mpeg 4 Video CompressionBasics of Mpeg 4 Video Compression
Basics of Mpeg 4 Video Compression
 
[Paris Unity3D meetup] - Système d’instancing dans endless legend reskin
[Paris Unity3D meetup] - Système d’instancing dans endless legend reskin[Paris Unity3D meetup] - Système d’instancing dans endless legend reskin
[Paris Unity3D meetup] - Système d’instancing dans endless legend reskin
 
Mise en oeuvre des framework de machines et deep learning v1
Mise en oeuvre des framework de machines et deep learning v1 Mise en oeuvre des framework de machines et deep learning v1
Mise en oeuvre des framework de machines et deep learning v1
 
Presentation Paolo
Presentation PaoloPresentation Paolo
Presentation Paolo
 
Algorithmique graphique
Algorithmique graphiqueAlgorithmique graphique
Algorithmique graphique
 
cours-gratuit.com--CoursMatlab-id4508 (1).pdf
cours-gratuit.com--CoursMatlab-id4508 (1).pdfcours-gratuit.com--CoursMatlab-id4508 (1).pdf
cours-gratuit.com--CoursMatlab-id4508 (1).pdf
 
Initiation à la retouche d’images.2012
Initiation à la retouche d’images.2012Initiation à la retouche d’images.2012
Initiation à la retouche d’images.2012
 
Ingénierie de la performance au sein des mégadonnées
Ingénierie de la performance au sein des mégadonnéesIngénierie de la performance au sein des mégadonnées
Ingénierie de la performance au sein des mégadonnées
 
Net duino et le .net micro framework
Net duino et le .net micro frameworkNet duino et le .net micro framework
Net duino et le .net micro framework
 
Deep learning.pdf
Deep learning.pdfDeep learning.pdf
Deep learning.pdf
 
representation_numerique_de_l_information_annote.ppt
representation_numerique_de_l_information_annote.pptrepresentation_numerique_de_l_information_annote.ppt
representation_numerique_de_l_information_annote.ppt
 
Isbs slides 2010
Isbs slides 2010Isbs slides 2010
Isbs slides 2010
 

Mais de CocoaHeads.fr

Présentation gnireenigne
Présentation   gnireenignePrésentation   gnireenigne
Présentation gnireenigneCocoaHeads.fr
 
Wireless ad hoc distribution
Wireless ad hoc distributionWireless ad hoc distribution
Wireless ad hoc distributionCocoaHeads.fr
 
Déploiement ad hoc et beta test
Déploiement ad hoc et beta testDéploiement ad hoc et beta test
Déploiement ad hoc et beta testCocoaHeads.fr
 
Automatisation shipping process
Automatisation shipping processAutomatisation shipping process
Automatisation shipping processCocoaHeads.fr
 
Slides de la Localisation
Slides de la LocalisationSlides de la Localisation
Slides de la LocalisationCocoaHeads.fr
 
Presentation de Mars
Presentation de MarsPresentation de Mars
Presentation de MarsCocoaHeads.fr
 
Presentation de Mars
Presentation de MarsPresentation de Mars
Presentation de MarsCocoaHeads.fr
 
Presentation de Mars
Presentation de MarsPresentation de Mars
Presentation de MarsCocoaHeads.fr
 

Mais de CocoaHeads.fr (14)

Hello xcode 4 v2
Hello xcode 4 v2Hello xcode 4 v2
Hello xcode 4 v2
 
Présentation gnireenigne
Présentation   gnireenignePrésentation   gnireenigne
Présentation gnireenigne
 
Mac app store redux
Mac app store reduxMac app store redux
Mac app store redux
 
Organic quality
Organic qualityOrganic quality
Organic quality
 
Wireless ad hoc distribution
Wireless ad hoc distributionWireless ad hoc distribution
Wireless ad hoc distribution
 
Déploiement ad hoc et beta test
Déploiement ad hoc et beta testDéploiement ad hoc et beta test
Déploiement ad hoc et beta test
 
Automatisation shipping process
Automatisation shipping processAutomatisation shipping process
Automatisation shipping process
 
Slides de la
Slides de la Slides de la
Slides de la
 
Slides de la Localisation
Slides de la LocalisationSlides de la Localisation
Slides de la Localisation
 
Design patterns
Design patternsDesign patterns
Design patterns
 
Design patterns
Design patternsDesign patterns
Design patterns
 
Presentation de Mars
Presentation de MarsPresentation de Mars
Presentation de Mars
 
Presentation de Mars
Presentation de MarsPresentation de Mars
Presentation de Mars
 
Presentation de Mars
Presentation de MarsPresentation de Mars
Presentation de Mars
 

Bitmaps

  • 1. Les bitmaps Présentation par Renaud Pradenc Céroce
  • 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
  • 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. 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. 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. 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. Organisation en mémoire
  • 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. Exemple: 8 bits/pixel • 8 bits/pixel = 256 niveaux de gris (0 = noir, 255= blanc) • Dimensions: 15 x 10 pixels
  • 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. 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. 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. 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. 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.
  • 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. 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. 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. Obtenir le CGContext courant • Avec Cocoa Touch: CGContextRef context = UIGraphicsGetCurrentContext(); • Avec Cocoa Mac: CGContextRef context = [[NSGraphicsContext currentContext] graphicsPort];
  • 22. Ex. 1: Bitmap bleue • Pour écrire vite: typedef union { struct { UInt8 r; UInt8 g; UInt8 b; UInt8 x; } component; UInt32 all; } PixelRGBx;
  • 23. Ex. 2: Vaguelettes Luminosité 255 0 x Période (en pixels) = 2π
  • 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. 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. 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. 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. 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.
  • 31. À bientôt ! Code source des exemples: http://www.renaudpradenc.com/cocoaheads Me contacter: renaud@ceroce.com Céroce