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

时间:2013-01-07 11:47:10

标签: visual-c++ opengl glut soil

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

我想为我制作的所有矩形生成一个平滑的边缘,我不希望顶点绘图方法为它做的工作,因为它消耗更多的CPU使用而且看起来不是很好,我不喜欢知道它是否可以使用纹理坐标(即 glTexCoord(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 ++的核心功能。

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

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

这个答案只讨论bmp文件是否可以处理透明度,以及如何使用SOIL加载png文件,我认为如果你通过推理进一步看,它会向你展示如何加载gif文件。根据{{​​3}},bmp是一种通过this wikipedia article支持透明度的文件类型。但根据alpha channel SO文章,它没有。根据我自己的经验,我还没有找到让bmp透明度工作的方法。所以理论上32位bmp文件应该支持透明度,但我对此表示怀疑。 (也许我会吃掉我的话?)

好的,从this开始,此代码说明如何加载处理透明度的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
 );

答案 2 :(得分:0)

在Photoshop中可以实现BMP透明度,至少24位深度。 它不会作为&#34; imwrite&#34;的选项出现。在Matlab。