bmp图像格式可以处理透明度

mr5*_*mr5 6 opengl glut soil visual-c++

我正在制作这个C++程序,它有按钮,按钮容器,聊天框等,我想用纹理包裹它.

我想为我制作的所有矩形生成一个平滑的边缘,我不希望顶点绘图方法为它做的工作,因为它消耗更多的CPU使用而且看起来不是很好,我不知道是否它可以使用纹理坐标(即glTertCoord(u,v)glVertex2f(x,y) w/c应该只有4,因为它是一个四边形)

我用来加载纹理使用SDL_LoadBMP() w/c只能加载.bmp格式.(我不确定因为它只说LoadBMP).

所以我的问题是:

  • 可以在.BMP格式处理的透明度?如果是的话,该怎么做?

  • 你能告诉我一些代码样本使用SOIL来加载格式.gif的图像或任何其他可以处理图像透明度的格式吗?

  • 四边形可以处理六边形或星形的不规则/多边形形状而不绘制其背景吗?

另外的问题

*如何导入通过c ++ opengl呈现的原始文本框,以便将文本复制到剪贴板中?至于我的节目中的聊天会话.


我创建了自己的库,使用GL_POINTS绘制文本,并且在调整窗口大小时看起来不太好,因为这些点是分散的.这需要const char*避免文本,#include <*string*>因为我希望我的程序不依赖于C++的核心功能.

所以更好的解决方案是使用位图绘制它.

有人建议使用图像绘制它,所以我真的需要透明度的东西,因为我希望它只使用四边形绘制.

Jos*_*ick 5

是的,位图格式确实支持透明度。

它取决于压缩方法,默认RGB方法支持24位颜色,但是BITFIELDS压缩支持32位颜色(24位+ alpha通道)。

您可以在http://en.wikipedia.org/wiki/BMP_file_format中阅读更多内容

我在Lime项目中成功使用了它,这是用Haxe编写的实现:https : //github.com/openfl/lime/blob/4adb7d638d15612e2542ae3a0ef581a786d21183/src/lime/_internal/format/BMP.hx


hap*_*der 1

这个答案仅解决 bmp 文件是否可以处理透明度,以及如何使用 SOIL 加载 png 文件,我认为如果您进一步推断,它也会向您展示如何加载 gif 文件。根据这篇维基百科文章,bmp 是一种通过Alpha 通道支持透明度的文件类型。但根据这篇SO 文章,事实并非如此。根据我自己的经验,我还没有找到使 bmp 透明的​​方法。所以理论上32位bmp文件应该支持透明度,但我对此表示怀疑。(也许我会食言?)

好的,来自SOIL 网站,这段代码告诉我们如何加载处理透明度的 png 文件:

/* load an image file directly as a new OpenGL texture */
 GLuint tex_2d = SOIL_load_OGL_texture
 (
       "img.png"
       SOIL_LOAD_AUTO,
       SOIL_CREATE_NEW_ID,
       SOIL_FLAG_MIPMAPS | SOIL_FLAG_INVERT_Y | SOIL_FLAG_NTSC_SAFE_RGB |
       SOIL_FLAG_COMPRESS_TO_DXT
 );
Run Code Online (Sandbox Code Playgroud)