Pointeurs et Représentation Bitmap
Elenaher
Membre
Hello,
Je suis encore un débutant en programmation et j'ai un petit problème qui m'embête beaucoup mais qui risque de sembler hyper simple à des programmeurs experimentés :
Je dispose de deux NSBitmapImageRep ( RepBitmap1 et RepBitmap2 ) de même taille. J'ai un pointeur p qui pointe sur un pixel de la première représentation et je souhaiterais modifier le pixel correspondant de la deuxième représentation.
De manière formelle je souhaiterais faire un truc du genre
p' = p - [RepBitmap1 bitmapData] + [RepBitmap2 bitmapData]
puis modifier à ma guise *p'
Quelqun aurait il une idée ?
Thx d'avance.
Je suis encore un débutant en programmation et j'ai un petit problème qui m'embête beaucoup mais qui risque de sembler hyper simple à des programmeurs experimentés :
Je dispose de deux NSBitmapImageRep ( RepBitmap1 et RepBitmap2 ) de même taille. J'ai un pointeur p qui pointe sur un pixel de la première représentation et je souhaiterais modifier le pixel correspondant de la deuxième représentation.
De manière formelle je souhaiterais faire un truc du genre
p' = p - [RepBitmap1 bitmapData] + [RepBitmap2 bitmapData]
puis modifier à ma guise *p'
Quelqun aurait il une idée ?
Thx d'avance.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Ca te permettra de lire la donnée binaire d'un pixel en x,y du premier imageRep (voire du second), d'y appliquer ton trairement, et enfin de la mettre dans le second imageRep aux mêmes coordonnées x,y.
.
Je vais réecrire la fin de mon programme en me basant sur ca. Le seul problème c'est que je n'arrive pas à voir quel type de valeur il faut que je mette après setPixel...
Je pensais mettre un int[1][1] comme j'ai une image en 8 bits gris...
Je dois avouer que je suis un newbie dans ce genre de truc et je ne trouve aucun exemple de code sur internet qui puisse m'aider :-\\ :-\\
Je commence un peu à en avoir marre... je passe des heures sur des problèmes de syntaxes tout bêtes...
Le premier argument (unsigned int[])pixelData signifie que tu dois passer en paramètre un tableau de unsigned int. Ce tableau se déclare comme suit :
[tt]unsigned int pixelData[16];[/tt]
Ici, un tableau de 16 unsigned int est créé (cette taille est fictive).
getPixel va remplir ce tableau (ou du moins une partie de ce tableau) avec les données correspondant à la couleur de 1 pixel. C'est le contenu de ce tableau que tu vas traiter puis remettre dans le bitmatRep via setPixel.
Maintenant, que doit-on utiliser comme taille de tableau pour getPixel/setPixel ?
C'est un vaste sujet.
La plupart des formats d'image, sans couche alpha, se contente de 3 octets (un R, un V et un , donc un tableau de 3 unsigned int est suffisant.
Voici un exemple :
Dans cette exemple, je lis le pixel en 0,0, puis j'augmente la seconde composante ([1] qui est le vert) de 50 pour remettre cette valeur dans la représentation.
Le résultat est donc d'augmenter le vert dans ce pixel.
.
En fait je ne sais pas pourquoi je me suis mis dans la tête de mettre un tableau bi-dimensionnel mais en fait ca n'a aucun sens... C'est si simple en fait... Je devais vraiment être crevé...
Merci encore...
Non, bien au contraire c'est complètement sensé. Travailler directement sur les matrices de pixels permet de gagner énormément par rapport à l'usage de getPixel et setPixel.
Si on a besoin de travailler uniquement sur quelques pixels (ex: évaluer la valeur du pixels lors du survol du curseur) là pas de problème. Mais si on a besoin d'appliquer un filtre sur l'ensemble de l'image là c'est une autre histoire. L'exemple de Bruz extrapolé à une simple image en 640x480 c'est déjà plus de 600000 appels de méthodes entre le getPixel et le setPixel. Cela ajouté au fait qu'obj-c, de par son côté très dynamique, est assez lent lors des appels de méthodes, on comprend aisément qu'accéder directement à la matrice donnera des résultats beaucoup plus performants.
On y décrit plusieurs méthodes, avec larges commentaires (en anglais), et discussion sur les vitesses d'execution respectives.
Je m'en étais servi pour écrire mon programme Fractales.