其他分享
首页 > 其他分享> > c – 如何在OpenGL中从纹理中删除黑色背景

c – 如何在OpenGL中从纹理中删除黑色背景

作者:互联网

我正在寻找一种方法来删除24位位图的背景,同时保持主图像完全不透明,直到现在混合已经达到了目的,但现在我需要保持主位不透明.我在Google上搜索过但发现没有任何帮助,我想我可能会搜索错误的条款,所以任何帮助都会非常感激.

编辑:
对不起,我现在正在使用黑色作为背景.

解决方法:

在为OpenGL创建纹理时,您需要将纹理创建为32位RGBA纹理.创建一个缓冲区来保存这个新的32位纹理的内容并迭代你的24位位图.每次遇到背景颜色时,在新的32位位图中将alpha设置为零.

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;
}

标签:c-3,c,opengl,alpha,blending
来源: https://codeday.me/bug/20190724/1520066.html