Question

Je cherche un moyen de supprimer l'arrière-plan d'un bitmap 24 bits, tout en maintenant l'image principale totalement opaque. Jusqu'à présent, la fusion s'est avérée utile, mais je dois maintenant conserver le bit principal opaque. J'ai effectué des recherches sur Google, mais rien ne m'a aidé. Je pense que je suis probablement à la recherche des termes erronés. Toute aide serait donc grandement appréciée.

Modifier: Oui, désolé, j'utilise le noir comme arrière-plan.

Était-ce utile?

La solution

Lorsque vous créez la texture pour OpenGL, vous voudrez créer la texture en tant que texture RGBA 32 bits. Créez un tampon pour contenir le contenu de cette nouvelle texture 32 bits et effectuez une itération sur votre bitmap 24 bits. Chaque fois que vous rencontrez votre couleur d'arrière-plan, définissez l'alpha sur zéro dans votre nouveau bitmap 32 bits.

struct Color32;
struct Color24;

void Load24BitTexture(Color24* ipTex24, int width, int height)
{
   Color32* lpTex32 = new Color32[width*height];

   for(x = 0; x < width; x++)
   {
      for(y = 0; y < height; y++)
      {
         int index = y*width+x;
         lpTex32[index].r = ipTex24[index].r;
         lpTex32[index].g = ipTex24[index].g;
         lpTex32[index].b = ipTex24[index].b;

         if( ipTex24[index] == BackgroundColor)
            lpTex32[index].a = 0;
         else
            lpTex32[index].a = 255;
      }
   }

   glTexImage2D(GL_TEXTURE_2D, 0, 4, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, lpTex32);

   delete [] lpTex32;
}

Autres conseils

Vous devrez charger vos textures au format GL_RGBA lors de votre appel à glTexImage2D. Si vous avez fait cela, il vous suffit d'activer le mélange:

    /* Set up blend */
glEnable(GL_BLEND);
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

Cela semble un peu déroutant. L’image 24 bits n’a aucune transparence, c’est simplement un tableau de valeurs RVB. Qu'entendez-vous par "garder le bit principal opaque"? Voulez-vous avoir tous les pixels avec certaines couleurs & # 8211; Par exemple, tous les pixels noirs & # 8211; transparent? Si vous le souhaitez, vous pouvez utiliser Google masque de transparence opengl ( voir le NeHe n ° 20 , par exemple).

Ce dont vous avez vraiment besoin, c'est d'un canal alpha dans votre image. Étant donné que le format est 24 bits, vous n’en avez pas, mais vous pouvez en créer un à la volée lorsque vous chargez l’image en réglant simplement l’alpha sur zéro pour chaque pixel noir (0x000000)

Il me semble que vous recherchez le tampon de gabarit, qui sert uniquement à ce type de tâche de restriction de la zone de dessin.

Le tampon stocke une valeur associée à chaque pixel, où 1 dessin sera rendu et où 0 sera masqué. Les tampons de gabarit sont généralement utilisés avec les techniques de rendu multipass pour créer des éléments tels que les réflexions et les affichages tête haute.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top