int  ImagePuissanceDe2( int   largpx,  int   hautpx,  int   nbc1px,  unsigned char *   image,
                        int * largpx2, int * hautpx2, int * nbc1px2, unsigned char **  image2 )
//Pour glTexImage2D: largpx = 2**m + 2*border obligatoirement! >= 64 ou 66
//Pour glTexImage2D: hautpx = 2**n + 2*border obligatoirement! >= 64 ou 66
{
    //Calcul de m et l en imposant border=0 sur largpx
    int l, m;
    puissance2( largpx, largpx2, &m );  // largpx2 = 2 ** m

    //Calcul de n et h en imposant border=0 sur hautpx
    int h, n;
    puissance2( hautpx, hautpx2, &n );  // hautpx2 = 2 ** n
    //REDUCTION: 2**m x 2**n pixels sont imposes pour le tableau RGB image2

    *image2 = NULL;
    if( *largpx2 <= 0 || *hautpx2 <= 0 || nbc1px  <= 0 ) return 1;

    int k=0;
    int i,j;
    int p ;
    if( nbc1px >= 3 )
    {
        *image2 = (unsigned char *)malloc(sizeof(unsigned char *)*(*largpx2) * (*hautpx2) * nbc1px);
        if( *image2 == NULL ) return 2;
        for (  i=0; i<*largpx2; i++)
            for ( j=0; j<*hautpx2; j++)
            {
                m = (i*hautpx+j) * nbc1px;
                for ( p=0; p<nbc1px; p++ )
                    (*image2)[k++] = image[ m + p ];
            }
        *nbc1px2 = nbc1px;
    }
    else  //On passe a 3 octets par pixel
    {
        *image2 = (unsigned char *) malloc(sizeof(unsigned char) * (*largpx2) * (*hautpx2) * 3);
        if( *image2 == NULL ) return 3;
        for ( i=0; i<*largpx2; i++)
            for ( j=0; j<*hautpx2; j++)
            {
                m = (i*hautpx+j) * nbc1px;
                for ( p=0; p<3; p++ )
                    (*image2)[k++] = image[ m ];
            }
        *nbc1px2 = 3;
    }
    return 0;
}
示例#2
0
void exo2_putbit0(int * x, int n)
{
    *x = *x ^ puissance2(n);
}
示例#3
0
void exo2_putbit1(int * x, int n)
{
    *x = *x | puissance2(n);
}