Non non j'ai rien dit ! C'est de ma faute en fait parce-que je calculais le nombre d'itération dans la première boucle alors que ça peut se calculer très facilement au début de la fonction :
void PutBitmap(short x, short y,unsigned char *pic,unsigned char *video_plane)
{
short i=0,j=0;
short nb_c=*(unsigned short *)(pic+0);
short nb_l=*(unsigned short *)(pic+2);
pic=pic+4;
short height = (nb_l/8)+1;
for(j=0;j<nb_c;j++)
{
short x_ = x;
short i=0;
unsigned char *pointeur = (video_plane+(((y<<8)-(y<<4)+x)>>3));
/* (256y-16y+x)/8 */
short n=height;
while(n--)
{
short mask = x_&7;
*(pointeur+1) |=*(pic)<<(8-mask);
*(pointeur++) |=*(pic++)>>(mask);
x_=x_+8;
}
y++;
}
}
D'ailleurs j'emploie cette optimisation un peu patout dans mon programme mais je ne vois jamais les optimisation tout de suite : j'essaye d'avoir d'avoir quelque chose de fonctionnel et de facile à comprendre.
et par contre pourquoi quand je fais ça :
*(pointeur+1) |=*(pic)<<(8-x_&7);
*(pointeur++) |=*(pic++)>>(x_&7);
ça foire et qaund je fais ça :
short mask = x_&7;
*(pointeur+1) |=*(pic)<<(8-mask);
*(pointeur++) |=*(pic++)>>(mask);
ça marche ?